1 -- 查询所有字段 2 SELECT * FROM t_student; 3 4 -- 查询指定字段 5 SELECT name,id FROM t_student; 6 7 --使用as给字段起别名 8 SELECT name AS 姓名, age AS年龄 FROM t_student; 9 SELECT t_student .name, t_student .age FROM t_student; 10 SELECT s.name, s.age FROM t_student AS s; 11 -- SELECT t_student .name, t_student .age FROM t_student AS s; 错误语句 12 13 -- 去重 14 SELECT DISTINCT gender FROM t_student; 15 16 -- 条件查询 17 -- 普通条件查询 18 SELECT * FROM t_studentWHERE age>18; 19 -- 比较运算符查询 20 SELECT * FROM t_student WHERE not (age>18 and age <30); 21 SELECT * FROM t_student WHERE not age>18 and age <30; 22 -- 模糊查询 23 -- like,% 替换一个或者多个,_替换一个 24 -- 查询姓名中以‘小开头的’名字 25 SELECT * FROM t_student WHERE name LIKE '小%'; 26 -- 查询姓名中有‘小的’所有名字 27 SELECT * FROM t_student WHERE name LIKE '%小%'; 28 -- 查询两个字的名字 29 SELECT * FROM t_student WHERE name LIKE '__'; 30 -- rlike 正则 31 -- 以周开头的名字 32 SELECT * FROM t_student WHERE name RLIKE '^周.*'; 33 -- 以周开头以伦结尾的名字 34 SELECT * FROM t_student WHERE name RLIKE '^周.*伦$'; 35 36 -- 范围查询 37 -- in 38 -- 查询年纪为18、34的姓名 39 SELECT * FROM t_student WHERE age IN (18,34); 40 -- not in 41 -- 查询年龄不为18、34的姓名 42 SELECT * FROM t_student WHERE age NOT IN (18,64); 43 -- between...and... 44 -- 查询年龄在18到34岁的姓名 45 SELECT * FROM t_student WHERE age BETWEEN 18 AND 34; 46 -- not between...and... 47 -- 查询年龄不在18和34之间的姓名 48 SELECT * FROM t_student WHERE age NOT BETWEEN 18 AND 34; 49 ---- not between...and...是一种固定语句,不是between...and...取反的意思。因此NOT (BETWEEN 18 AND 34)是错误的 50 SELECT * FROM t_student WHERE NOT age BETWEEN 18 AND 34; 51 -- 这才是取反操作 52 53 -- 空判断 54 -- 判空 IS NULL 55 SELECT * FROM t_student WHERE height IS NULL; 56 -- 判非空 IS NOT NULL 57 SELECT * FROM t_student WHERE height IS NOT NULL; 58 59 -- 排序 60 --ORDER BY 字段 61 -- ASC从小到大排列,升序 62 -- 查询年龄18-34之间的男性,并年龄升序排列 63 SELECT * FROM t_student WHERE age BETWEEN 18 AND 34 AND gender=1 ORDER BY age ASC; 64 -- DESC从大到小排列,降序 65 -- 查询年龄在18-34之间的女性,身高降序 66 SELECT * FROM t_student WHERE age BETWEEN 18 AND 34 AND gender=2 ORDER BY height DESC; 67 -- ORDER BY 多个字段 68 SELECT * FROM t_student WHERE age BETWEEN 18 AND 34 AND gender=2 ORDER BY height ASC, id DESC; 69 70 -- 聚合函数 71 -- 总数,count 72 -- 查询男性有多少人,女性有多少人 73 SELECT COUNT(name) FROM t_student WHERE gender=1; 74 SELECT COUNT(*) AS 女性人数, avg(age) AS 平均年龄 FROM t_student WHERE gender=1; 75 -- 最大值 max 76 --查询最大的年龄 77 SELECT MAX(age) FROM t_student ; 78 -- 最小值 min 79 -- 查询女性的最高身高 80 SELECT MAX(height) FROM t_student WHERE gender=2; 81 -- 平均值 avg 82 -- 计算平均年龄 83 SELECT AVG(age) FROM t_student ; 84 -- 四舍五入 round(123.23, 1)保留一位小数 85 -- 计算所有人的平均年龄,保留两位小数 86 SELECT ROUND(AVG(age), 2) FROM t_student ; 87 88 -- 分组 89 -- gruop by 90 -- 按照性别分组,查询所有性别 91 SELECT gender FROM t_student GROUP BY gender; 92 -- 计算每种性别中的人数 93 SELECT gender,COUNT(NAME) FROM t_student GROUP BY gender; 94 -- 计算男性的人数 95 SELECT gender,COUNT(NAME) FROM t_student WHERE gender=1 GROUP BY gender; 96 -- group_concat(...) 97 --查询同种性别中的姓名 98 SELECT gender,group_concat(name) FROM t_student WHERE gender=1 GROUP BY gender; 99 SELECT gender,group_concat(name, id, age) FROM t_student WHERE gender=1 GROUP BY gender; 100 SELECT gender,group_concat(name,' ',id, '', age) FROM t_student WHERE gender=1 GROUP BY gender; 101 -- having 102 -- 查询平均年龄超过30岁的性别、姓名 103 SELECT gender, group_concat(NAME), AVG(age) FROM t_student GROUP BY gender having AVG(age)>30; 104 -- where是对原表进行过滤,having是对分组后每个组的数据进行判断 105 -- 查询每种性别中的人数多于两个的信息 106 SELECT gender, group_concat(NAME) FROM t_student GROUP BY gender having COUNT(NAME)>2; 107 108 -- 分页 109 -- limit start,count 110 -- start表示从第几个开始取(0是第一个),count是取几个 111 SELECT * FROM t_student LIMIT 1, 5; 112 -- 限制查询出来的个数 113 SELECT * FROM t_student WHERE gender=1 LIMIT 2; 114 -- 查询前5个数据 115 SELECT * FROM t_student LIMIT 0, 5; 116 -- 查询 ID 6-10(包含)的数据 117 SELECT * FROM t_student LIMIT 5,5; 118 -- 每页显示2个,第1个页面 119 SELECT * FROM t_student LIMIT 0, 2; 120 -- 每页显示2个,第2个页面 121 SELECT * FROM t_student LIMIT 2, 2; 122 -- 每页显示2个,第3个页面 123 SELECT * FROM t_student LIMIT 4, 2; 124 -- 每页显示2个,第4个页面 125 SELECT * FROM t_student LIMIT 6, 2; 126 -- 每页显示2个,显示第6页信息,按照年龄从小到大排序 127 SELECT * FROM t_student LIMIT 10,2 ORDER BY age; 128 -- LIMIT 只能放在最后 129 -- 连接查询 130 -- inner join ...on 显示两者共有,即交集 131 SELECT S.*,C.NAME FROM t_student AS S INNER JOIN CLASSES AS C ON S.cls_id = C.id; 132 -- left join ...on 谁在左边以谁为主,如果左边在右边没有对应的值,就显示null 133 SELECT * FROM t_student AS S LEFT JOIN CLASSES AS C ON S.cls_id=C.id; 134 -- right join ...on 谁在右边以谁为主,如果右边在左边没有对应的值,就显示null 135 SELECT * FROM t_student AS S RIGHT JOIN CLASSES AS C ON S.cls_id=C.id; 136 -- 查询没有对应班级的学生 137 SELECT * FROM t_student AS S left JOIN CLASSES AS C ON S.cls_id=C.id having c.id is null; 138 -- 此处having改成where也行,但不建议,原则上原表过滤用where,查询结果过滤用having 139 140 -- 自关联 141 142 -- 子查询(自关联的表也可以用子查询得到相同的结果) 143 select * from areas where pid = (select aid from areas where atitle = '河北省')