1.普通查询
1 SELECT 待显示列字段 FROM 表名 [WHERE 条件]; 2 例:SELECT userid ,username FROM userinfo WHERE userage<30; 3 #查询所有字段使用:SELECT * FROM 表名;
2.排序查询 order by asc | desc
1 SELECT * FROM userinfo ORDER BY userage ASC; //升序 2 SELECT * FROM userinfo ORDER BY userage,userid DESC; //降序
3.区间查询 between | and
1 SELECT * FROM userinfo WHERE userage>=18 AND userage<=40; 2 SELECT * FROM userinfo WHERE userage BETWEEN 18 AND 40;
4.范围查询 in | not in
1 SELECT * FROM userinfo WHERE useraddress IN ('武汉','罗马'); 2 SELECT * FROM userinfo WHERE useraddress NOT IN ('武汉','罗马');
5.模糊查询 like % | _ (下划线一次只能匹配任意一个字符)
1 SELECT * FROM userinfo WHERE username LIKE '张%'; ##以张开头的数据 2 SELECT * FROM userinfo WHERE username LIKE '%亮'; ##以亮结尾的数据 3 SELECT * FROM userinfo WHERE username LIKE '%亮%'; ##包含亮的数据 4 SELECT * FROM userinfo WHERE username LIKE '__民'; ##第三个字是民的数据
6.为空查询 is null | is not null
1 SELECT * FROM userinfo WHERE useraddress IS NOT NULL;
7.多条件查询 and | or
1 SELECT * FROM userinfo WHERE usersex='男' AND userage>20; 2 SELECT * FROM userinfo WHERE usersex='男' OR userage>20;
8.唯一查询 distinct
1 SELECT DISTINCT useraddress FROM userinfo;
9.分组查询 group by 字段 having 多条件表达式
1 #求出每个城市有多少人,并显示姓名,统计总人数 2 SELECT useraddress,COUNT(*) ,GROUP_CONCAT(username) FROM userinfo GROUP BY useraddress WITH ROLLUP; 3 #求出每个城市有多少男的,有多少女的 4 SELECT useraddress,usersex,COUNT(*) FROM userinfo GROUP BY useraddress,usersex; 5 #求出有两个年龄大于40岁以上人的城市 6 SELECT * FROM userinfo WHERE userage>40 GROUP BY useraddress HAVING COUNT(*)=2; 7 ##where,order by,limit 的先后顺序 8 ##查询前10个男生,按照年龄排序 SELECT * FROM userinfo WHERE usersex='男' ORDER BY userage LIMIT 0,10; 9 ##如何在查询中筛选行:where;如何在查询中筛选列:select 列 from
10.分页查询 limit ?,? (第一个?:index从即开始(0),第二个?:总共显示几个)
1 SELECT * FROM userinfo LIMIT 3,7; 2 ##每页显示10条,如何显示第2页;页码:page 每页显示:num 3 SELECT * FROM userinfo LIMIT (page-1)*num,num;
11.别名查询 as
1 SELECT userid AS 编号 ,username AS 姓名 ,usersex AS 性别 FROM userinfo u;
12.函数查询
1 #数学函数 2 SELECT ABS(-4),ABS(5); ##绝对值 3 SELECT BIN(5),OCT(13),HEX(21); 4 SELECT CEILING(5.4),FLOOR(5.7),ROUND(5.7); 5 SELECT GREATEST(6,5,4,6,7,3),LEAST(6,5,34,7,8,2); 6 SELECT MOD(7,5); 7 SELECT PI(); 8 SELECT RAND(); ##随机数 9 SELECT ROUND(); ##四舍五入 10 #聚合函数 11 SELECT COUNT(*) FROM userinfo; ##表中总行数 12 SELECT MAX(字段),MIN(字段) FROM userinfo; 13 SELECT SUM(字段),AVG(字段) FROM userinfo; ##总和及平均数 14 #字符函数 15 SELECT ASCII('a'); 16 SELECT LENGTH('a比cD'),CHAR_LENGTH('a比cD'),BIT_LENGTH('a比cD'); ##计算字符串个数 17 SELECT CONCAT('a','b','c','d'),CONCAT_WS(',','a','b','c','d'); ##连接字符串 18 SELECT LOWER('aBcd'),UPPER('aBcd'); ##转换大小写 19 SELECT INSERT('abcdefg',2,3,'888'),REPLACE('abcdefg','cd','888'); ##替换字符串 20 SELECT INSTR('abcdefg','c'),POSITION('c' IN 'abcdefg'),FIND_IN_SET('21',userage) FROM userinfo; 21 SELECT LEFT('abcdefg',3),RIGHT('abcdefg',3); ##返回左边或右边指定个数的字符 22 SELECT LPAD('hello',10,'???'),RPAD('hello',10,'???'); ##在左边或右边填充字符串 23 SELECT LTRIM(' a b c '),RTRIM(' a b c '),TRIM(' a b c '); ##删除空格 24 SELECT TRIM('xy' FROM 'asdasdxyadsfdas'); ##删除指定字符串 25 SELECT REVERSE('abcd'); ##反转字符串 26 SELECT SUBSTR('abcdefg',2,3); 27 ##时间日期函数 28 SELECT NOW(); ##获取当前系统日期和时间 29 SELECT CURDATE(),CURRENT_DATE(); ##获得系统当前日期 30 SELECT CURTIME(),CURRENT_TIME(); ##获取系统当前时间 31 SELECT YEAR(NOW()),MONTH(NOW()); 32 SELECT HOUR(NOW()),MINUTE(NOW()),SECOND(NOW()); ##获取当前时间的时分秒 33 SELECT DAYOFWEEK(NOW()),DAYOFYEAR(NOW()),DAYOFMONTH(NOW()); ##返回今天是一周/年/月的第几天 34 SELECT DATE_ADD(NOW(),INTERVAL -3 MONTH); 35 SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()); ##返回nuix格式的时间戳 36 SELECT FROM_UNIXTIME('1566396366'); ##将unix格式的时间戳转换为普通格式时间 37 ##系统函数(类型转换) cast(值 as 新类型) 38 SELECT CAST('-029' AS SIGNED INTEGER); 39 SELECT CAST(NOW() AS CHAR); 40 SELECT CAST(NOW() AS SIGNED INTEGER); 41 ##加密函数 42 SELECT PASSWORD('12346'); 43 SELECT MD5('123456'); 44 SELECT ENCODE ('123456','123'); ##加密 45 SELECT DECODE(ENCODE('123456','123'),'123'); ##解密 46 ##其他函数 47 SELECT FORMAT (12313.1313313,3); ##格式化数字,保留小数点后指定位数 48 SELECT INET_ATON('192.168.0.3'),INET_NTOA('3232235523'); ##字符串网络点地址与数值网络地址相互转换
13.表连接查询 join
1 #左外连接(重点) 2 SELECT 待显示列字段 FROM 左表 LEFT [OUTER] JOIN 右表 ON 连接条件 [WHERE 筛选条件]; 3 SELECT * FROM classinfo c LEFT OUTER JOIN stuinfo s ON c.classid=s.classid; 4 #右外连接 5 SELECT 待显示列字段 FROM 左表 RIGHT [OUTER] JOIN 右表 ON 连接条件 [WHERE 筛选条件]; 6 SELECT * FROM classinfo c RIGHT OUTER JOIN stuinfo s ON c.classid=s.classid; 7 #内连接(重点) 8 SELECT 待显示列字段 FROM 表A INNER JOIN 表B ON 连接条件 [WHERE 筛选条件]; 9 SELECT 待显示列字段 FROM 表A,...表N WHERE 连接条件 [AND 筛选条件]; 10 例:SELECT province ,city ,AREA FROM provinces p,cities c ,areas a WHERE p.provinceid=c.provinceid AND c.cityid=a.cityid; 12 #获取浙江省的信息 13 SELECT province ,city ,AREA FROM provinces p,cities c ,areas a WHERE p.provinceid=c.provinceid AND c.cityid=a.cityid AND province='浙江省'; 15 #显示 省名称,市名称,区县名称 16 SELECT province,city,AREA FROM cities c LEFT JOIN provinces p ON p.provinceid=c.provinceid LEFT JOIN areas a ON c.cityid=a.cityid;
14.子查询:将一个查询的结果当成是一个查询的条件,那么这个查询就是子查询,外部查询就是父查询。
1)带any、some关键字的子查询:表示满足其中任一个条件,就返回一个结果作为外层查询的条件。
1 例:SELECT * FROM userinfo WHERE userage>ANY(SELECT userage FROM userinfo WHERE useraddress='苏州');
2)带all关键字的子查询:使用all时需要同时满足所有内层查询的条件。
3)带exists关键字的子查询:exists关键字后面的参数是一个任意的子查询,如果至少返回一行,则exists结果为true并进行外查询;如果没有返回,则exists结果为false,不进行外部查询。
1 例:SELECT * FROM userinfo WHERE userage<30 AND EXISTS (SELECT username FROM userinfo WHERE username='白莲女');
4)带in关键字的子查询:内层查询仅仅返回一个数据列,这个数据列里的值将提供给外部查询语句进行比较查询。
1 例:查询与'王璐'或者'郭二旦'地址一样的人 2 SELECT * FROM userinfo WHERE useraddress IN ( SELECT useraddress FROM userinfo WHERE username='王璐'OR username = '郭二旦' );
15.合并查询结果-->并集(union,union all),交集(intersect),差集(minus)
1 例:SELECT userid FROM userinfo WHERE userid<10 2 UNION 3 SELECT userid FROM userinfo WHERE userid BETWEEN 5 AND 14;
16.使用正则表达式查询 regexp
1 字符“ ^ ” 匹配以特定字符或字符串开头的文本 2 例:SELECT * FROM userinfo WHERE username REGEXP '^折'; 3 字符“ $ ” 匹配以特定字符或字符串结尾的文本 4 例:SELECT * FROM userinfo WHERE username REGEXP '女$'; 5 字符“ . ” 匹配任意一个字符 6 字符“ * ”匹配前面的字符任意多次,包括0次;“ + ”匹配前面的字符至少一次 7 匹配多个字符串,使用分隔符“ | ”隔开 8 例:SELECT * FROM userinfo WHERE username REGEXP '折|女'; 9 方括号“ [] ”匹配指定字符中的任意一个 10 例:SELECT * FROM userinfo WHERE userage REGEXP '[03]'; 11 “ [^字符集合] ” 匹配不在指定集合中的任意字符 12 例:SELECT * FROM userinfo WHERE userage REGEXP '[^50-60]'; 13 字符串{n, } 表示至少匹配n次前面的字符串;字符串{n,m}表示匹配前面的字符串不少于n次,不多于m次 14 例:SELECT * FROM userinfo WHERE userage REGEXP '2{1,}';