表查询操作

Posted huih

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表查询操作相关的知识,希望对你有一定的参考价值。

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 ##whereorder by,limit 的先后顺序
8 ##查询前10个男生,按照年龄排序    SELECT * FROM userinfo WHERE usersex= ORDER BY userage LIMIT 0,10;
9 ##如何在查询中筛选行:where;如何在查询中筛选列:selectfrom

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,};

 

以上是关于表查询操作的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate的HQL多表查询

PostgreSQL 是不是支持表(片段)的透明压缩?

mybatis-基于xml的多表查询

sqlalchemy——单表操作

使用 savedInstanceState 保存片段状态

JDBC操作数据库之查询数据