一、单表查询 SELECT
1、基本语法
-- 从 table_name 表中查询 column_name1,column_name2 列SELECT column_name1,column_name2,... FROM table_name;-- 从 table_name 表中查询 所有 列SELECT * FROMtable_name;
2、DISTINCT 过滤结果
-- DISTINCT 关键词用于返回 唯一不同的值,去除 column_name列中的重复值SELECT DISTINCT column_name FROM table_name;
3、WHERE子句
-- AND/OR 用于连接多个条件SELECT column_name FROM table_name WHERE codition1 AND/OR codition2 AND/OR ...;
- codition 条件子句
| 条件子句运算符 | 描述 |
| —- | —- |
| =, <>, !=, >, >=, <, <= | 等于,不等于,不等于,大于,大于等于,… |
| (NOT) BETWEEN…AND… | (不)在某个范围之内 |
| LIKE | 模糊查询 |
| 常用的通配符 | %表示一个或多个字符,_表示一个字符
%M_ :表示查询以M在倒数第二位的所有内容
REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式 | | (NOT) IN | (不)指定针对某个列的多个可能值 | | IS NULL | 空值判断 | | NOT | 非 满足不包含该条件的值 | | 逻辑运算的优先级: | () > not > and > or |
WHERE 子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当 0 时转化为 false,1 转化为 true。
4、ORDER BY、LIMIT、OFFSET
SELECT column_name, column_name...FROM table_nameWHERE codition1 AND/OR codition2 AND/OR ...ORDER BY column_name1,column_name2 ASC|DESCLIMIT num_list OFFSET num_offset;
ASC|DESC 升序|降序
- ORDER BY 排列时,不写明ASC DESC的时候,默认是ASC
- ORDER BY 多列的时候,desc/asc 只对它紧跟着的第一个列名有效,其他不受影响
- ORDER BY 多列的时候,先按照第一个column name1排序,再按照第二个column name2排序
LIMIT 和 OFFSET 子句通常和 ORDER BY 语句一起使用,当我们对整个结果集排序之后,我们可以使用 LIMIT来指定只返回多少行结果,用 OFFSET来指定从哪一行开始返回。你可以想象一下从一条长绳子剪下一小段的过程,我们通过 OFFSET 指定从哪里开始剪,用 LIMIT指定剪下多少长度。
注意:并非所有的数据库系统都支持SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。
二、单表插入 INSERT INTO
1、INSERT INTO 语句可以有两种编写形式
-- 第一种形式:无需指定要插入数据的列名,只需提供被插入的值即可(需要插入行的每一列数据):INSERT INTO table_name VALUES (value1,value2,value3,...);-- 第二种形式:需要指定列名及被插入的值:INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);
2、insert into select 和select into from 的区别(多表)
Insert into scorebak select * from socre where neza='neza'--插入一行,要求表scorebak 必须存在Insert into Table2 (field1,field2,...) select value1,value2,... from Table1;--要求目标表Table2必须存 如果不存在,系统则会提示对象无效。select * into scorebak from score where neza='neza';--也是插入一行,要求表scorebak 不存在SELECT vale1, value2 into Table2 from Table1;--要求目标表Table2不存在,因为在插入时会自动创建表Table2,好处:将Table1中指定字段数据复制到Table2中。
3、批量导入某表中的某列数据(多表)
INSERT INTO dbo.CusTemp (证件号码) SELECT 证件号码 FROM dbo.CusTemp2;
三、单表更新 UPDATE
-- 执行没有 WHERE 子句的 UPDATE 要慎重,再慎重UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;
四、单表删除 DELETE
-- 删除 table_name 表中,some_column 列中值为some_value 的某行数据DELETE FROM table_name WHERE some_column=some_value;-- 不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变,不释放空间DELETE FROM table_name;-- 或DELETE * FROM table_name;
DROP、TRUNCATE、DELETE区别:
- DROP table_name;
删除table_name表,并释放空间,将table_name删除的一干二净。
- TRUNCATE table_name;
删除表table_name里的内容,并释放空间,但不删除表的定义,表的结构还在。
- DELETE:
1)、删除指定数据
2)、删除整个表,仅删除表的所有内容,保留表的定义,不释放空间,可以回滚恢复
执行速度:drop > truncate > delete
五、别名 AS
1、列的 SQL 别名语法
SELECT column_name AS alias_name FROM table_name;-- 可以通过CONCAT,将多个列合并为一列SELECT CONCAT(cn1,’,’,cn2,’,’...) AS alias_name FROM table_name;
2、表的 SQL 别名语法
SELECT column_name(s) FROM table_name AS alias_name;
使用场景:
- 在查询中涉及超过一个表
- 在查询中使用了函数
- 列名称很长或者可读性差
- 需要把两个列或者多个列结合在一起
六、连接 JOIN
INNER JOIN:如果表中有至少一个匹配,则返回行LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行FULL JOIN:只要其中一个表中存在匹配,则返回行
得到的结果数比较:inner join <= min(left join, right join)full join >= max(left join, right join)当 inner join < min(left join, right join)时,full join > max(left join, right join)
1、INNER JOIN(简单JOIN):INNER JOIN 从多个表中返回满足 JOIN 条件的所有行
SELECT column, another_table_column, …FROM table1 (主表)(INNER) JOIN table2 (要连接的表) -- INNER JOIN 和 JION 相同ON table1.column_name = table2.column_name (主键连接,两个相同的连成1条)WHERE condition(s)ORDER BY column, … ASC/DESCLIMIT num_limit OFFSET num_offset;
2、LEFT/RIGHT/FULL JOIN:外连接
SELECT column, another_column, …FROM mytableLEFT/RIGHT/FULL (OUTER) JOIN another_table -- 某些数据库中 OUTERON mytable.id = another_table.matching_idWHERE condition(s)ORDER BY column, … ASC/DESCLIMIT num_limit OFFSET num_offset;
3、NULL处理
SELECT column, another_column, …FROM mytableWHERE column IS/IS NOT NULL AND/OR another_condition AND/OR…;
4、在使用 join 时,on 和 where 条件的区别如下:
- on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
- where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
七、UNION
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
1、UNION 操作符
- 合并两个或多个 SELECT 语句的结果
- UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同
SELECT col1,... FROM table1UNION (ALL)SELECT col1,... FROM table2;
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL
