SQL笔记之SELECT语句 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:Nemo 链接:https://www.cnblogs.com/blknemo/ 来源:博客园

SELECT语句的完整语法: SELECT【ALL/DISTINCT】目标列表达式  [AS 别名],··· --ALL不去掉重复 DISTINCT去掉重复 FROM 表名或视图名 或者(SELECT语句)AS 表名(属性) [WHERE] 条件表达式 [GROUP BY] 列名 【HAVING 条件表达式】 [ORDER BY] 列名 【ASC|DESC】 --ASC = ASCENDING(默认为递增递增)DESC = DESCENDING(递减) [LIMIT子句] 去重选项 去重选项是指是否对结果中完全相同的记录(所有字段数据都相同)进行去重: ALL:不去重 (默认) DISTINCT:去重 Copy1 2 3 4 5 CREATE TABLE student(name VARCHAR(15),gender VARCHAR(15)); INSERT INTO student(name,gender) VALUES("lihua","male"); INSERT INTO student(name,gender) VALUES("lihua","male"); SELECT * FROM student; SELECT DISTINCT * FROM student; 字段别名 字段别名是指给列名另取一个名字 Copy1 2 3 4 5 CREATE TABLE student(name VARCHAR(15),gender VARCHAR(15)); INSERT INTO student(name,gender) VALUES("lihua","male"); INSERT INTO student(name,gender) VALUES("lihua","male"); SELECT * FROM student; SELECT name AS "姓名",gender AS "性别" FROM student; 数据源 数据源可以为单表数据源或者多表数据源 单表:SELECT 字段列表 FROM 表名; 多表: SELECT 字段列表 FROM 表名1,表名2,…; PS : 多表查询时是将每个表中的X条记录与另一个表Y条记录组成结果,组成的结果的记录条数为X*Y (笛卡尔积) WHERE 子句 WHERE子句是用于筛选符合条件的结果的。 WHERE几种语法: 基于值: = : WHERE 字段 = 值 ;查找出对应字段等于对应值的记录。(相似的,<是小于对应值,<=是小于等于对应值,>是大于对应值,>=是大于等于对应值,!=是不等于) LIKE : WHERE 字段 LIKE 值 ;功能与 = 相似 ,但可以使用模糊匹配来查找结果。 IS : WHERE 字段 IS 值;判断对应字段是否为空。(IS [NOT] NULL) 基于值的范围: IN: WHERE 字段 IN 范围;查找出对应字段的值在所指定范围的记录。 NOT IN : WHERE 字段 IN 范围;查找出对应字段的值不在所指定范围的记录。 BETWEEN X AND Y :WHERE 字段 BETWEEN X AND Y;查找出对应字段的值在闭区间[X,Y]范围的记录。 条件复合: OR : WHERE 条件1 OR 条件2… ; 查找出符合条件1或符合条件2的记录。 AND: WHERE 条件1 AND 条件2… ; 查找出符合条件1并且符合条件2的记录。 NOT : WHERE NOT 条件1 ;查找出不符合条件的所有记录。 &&的功能与AND相同;||与OR功能类似,!与NOT 功能类似。 PS : WHERE是从磁盘中获取数据的时候就进行筛选的。所以某些在内存是才有的东西WHERE无法使用。(字段别名什么的是本来不是“磁盘中的数据”(是在内存这中运行时才定义的),所以WHERE无法使用,一般都依靠HAVING来筛选) GROUP BY 子句 GROUP BY 可以将查询结果依据字段来将结果分组。 Copy1 2 SELECT name,gender,count(name) AS "组员" FROM student AS d GROUP BY name; SELECT name,gender,count(name) AS "组员" FROM student AS d GROUP BY name,gender; PS : 实际上,GROUP BY 的作用主要是统计(使用情景很多,比如说统计某人的总分数,学生中女性的数量。。),所以一般会配合一些统计函数来使用: COUNT(X):统计每组的记录数,X是*时代表记录数,为字段名时代表统计字段数据数(除去NULL) MAX(X):统计最大值,X是字段名 MIN(X):统计最小值,X是字段名 AVG(X):统计平均值,X是字段名 SUM(X):统计总和,X是字段名 GROUP BY 字段 后面还可以跟上ASC或DESC,代表分组后是否根据字段排序。 HAVING 子句: HAVING功能与WHERE类似,不过HAVING的条件判断发生在数据在内存中时,所以可以使用在内存中才发生的数据,如“分组”,“字段别名”等。(操作符之类的可以参考WHERE的,增加的只是一些“内存”中的筛选条件) Copy1 2 SELECT name AS n ,gender FROM student HAVING n ="lihua"; SELECT name,gender,COUNT(*) AS "组员" FROM student AS d GROUP BY name,gender HAVING COUNT(*) >2 ;-- 这里只显示记录数>2的分组 ORDER BY 子句: ORDER BY 可以使查询结果按照某个字段来排序 语法:SELECT 字段列表 FROM 表名 ORDER BY 字段 [ASC|DESC]; 字段可以有多个,从左到右,后面的排序基于前面的,(比如:先按NAME排序,再按GENDER排序,后面的GENDER排序是针对前面NAME排序时NAME相同的数据) ASC代表排序是递增的 (默认) DESC代表是递减的 也可以指定某个字段的排序方法,比如第一个字段递增,第二个递减。只需要在每个字段后面加ASC或DESC即可(虽然默认不加是递增,但还是加上更清晰明确)。 Copy1 2 3 SELECT * FROM student ORDER BY name; SELECT * FROM student ORDER BY name,gender; SELECT * FROM student ORDER BY name ASC,gender DESC; LIMIT 子句: LIMIT是用来限制结果数量的。与WHERE\HAVING等配合使用时,可以限制匹配出的结果。但凡是涉及数量的时候都可以使用LIMIT(这里只是强调LIMIT的作用,不要过度理解) 语法:SELECT 字段列表 FROM 表名 LIMIT [OFFSET,...] COUNT; COUNT是数量 OFFSET是起始位置,OFFSET从0开始,可以说是每条记录的索引号 Copy1 2 3 4 SELECT * FROM student LIMIT 1; SELECT * FROM student LIMIT 3,1; SELECT * FROM student WHERE name ="lihua" limit 1; SELECT * FROM student WHERE name ="lihua" limit 3,1; 此文参考:https://www.cnblogs.com/progor/p/8786133.html 作者:Nemo 出处:https://www.cnblogs.com/blknemo/p/10030855.html 本站使用「blknemo」创作共享协议,转载请在文章明显位置注明作者及出处。 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:Nemo 链接:https://www.cnblogs.com/blknemo/ 来源:博客园 https://www.cnblogs.com/blknemo/p/10030855.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信