一、DML 语句
DML: INSERT, DELETE, UPDATE1、INSERT 语句
功能:一次插入一行或多行数据 语法INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE #如果重复更新之 col_name=expr [, col_name=expr] ... ] INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]
2、UPDATE 语句
语法:UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
3、DELETE 语句
删除表中数据,但不会自动缩减数据文件的大小。
语法:DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] #可先排序再指定删除的行数如果想清空表,保留表结构,也可以使用下面语句,此语句会自动缩减数据文件的大小。
RUNCATE TABLE tbl_name;缩减表大小
OPTIMIZE TABLE tb_name
二、DQL 语句
1、单表操作SELECT [ALL | DISTINCT | DISTINCTROW ] [SQL_CACHE | SQL_NO_CACHE] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [FOR UPDATE | LOCK IN SHARE MODE]字段显示可以使用别名: col1 AS alias1, col2 AS alias2, ... WHERE子句:指明过滤条件以实现"选择"的功能: 过滤条件:布尔型表达式 算术操作符:+, -, *, /, % 比较操作符:=,<=>(相等或都为空), <>, !=(非标准SQL), >, >=, <, <= 范例查询: BETWEEN min_num AND max_num 不连续的查询: IN (element1, element2, ...) 空查询: IS NULL, IS NOT NULL DISTINCT 去除重复行,范例:SELECT DISTINCT gender FROM students; 模糊查询: LIKE 使用 % 表示任意长度的任意字符 _ 表示任意单个字符 RLIKE:正则表达式,索引失效,不建议使用 REGEXP:匹配字符串可用正则表达式书写模式,同上 逻辑操作符:NOT,AND,OR,XOR GROUP BY:根据指定的条件把查询结果进行"分组"以用于做"聚合"运算 常见聚合函数: count(), sum(), max(), min(), avg(),注意:聚合函数不对null统计 HAVING: 对分组聚合运算后的结果指定过滤条件 一旦分组 group by ,select语句后只跟分组的字段,聚合函数 ORDER BY: 根据指定的字段对查询结果进行排序 升序:ASC 降序:DESC LIMIT [[offset,]row_count]:对查询的结果进行输出行数数量限制,跳过offset,显示row_count行,offset默为值为0 对查询结果中的数据请求施加"锁" FOR UPDATE: 写锁,独占或排它锁,只有一个读和写操作 LOCK IN SHARE MODE: 读锁,共享锁,同时多个读操作 2、多表查询 子查询:在SQL语句嵌套着查询语句,性能较差,基于某语句的查询结果再次进行的查询 (1)用于比较表达式中的子查询;子查询仅能返回单个值 (2)用于IN中的子查询:子查询应该单独查询并返回一个或多个值重新构成列表 (3)用于EXISTS 和 Not EXISTS (4)用于FROM子句中的子查询 联合查询:UNION SELECT Name,Age FROM students UNION SELECT Name,Age FROM teachers; 交叉连接:笛卡尔乘积 CROSS JOIN 内连接:inner join 内连接取多个表的交集 等值连接:让表之间的字段以"等值"建立连接关系 不等值连接: 自然连接:去掉重复列的等值连接 , 语法: FROM table1 NATURAL JOIN table2; 当源表和目标表共享相同名称的列时,就可以在它们之间执行自然连接,而无需指定连接列。 在使用纯自然连接时,如没有相同的列时,会产生交叉连接(笛卡尔乘积) 语法:(SQL:1999)SELECT table1.column, table2.column FROM table1 NATURAL JOINtable2; 外连接: 左外连接:以左表为主根据条件查询右表数据﹐如果根据条件查询右表数据不存在使用null值填充 FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col 右外连接:以右表为主根据条件查询左表数据﹐如果根据条件查询左表数据不存在使用null值填充 FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col 完全外连接: FROM tb1 FULL OUTER JOIN tb2 ON tb1.col=tb2.col 注意:MySQL 不支持此SQL语法 自连接:本表和本表进行连接查询
3、SELECT 语句处理的顺序
查询执行路径中的组件:查询缓存、解析器、预处理器、优化器、查询执行引擎、存储引擎
SELECT语句的执行流程:FROM Clause --> WHERE Clause --> GROUP BY --> HAVING Clause -->SELECT --> ORDER BY --> LIMIT
标签:...,name,expr,mysql,DML,查询,连接,DDL,col From: https://www.cnblogs.com/dujy/p/18013719