前言

查询数据 是数据库操作中最常用的操作。通过对数据库的查询,用户可以从 数据库中获取需要的数据。数据库中可能包含着无数的表,表中可能包 含着无数的记录。因此,要获得所需的数据并非易事。MySQL中可以使 用SELECT语句来查询数据。根据查询的条件的不同,数据库系统会找到 不同的数据。通过SELECT语句可以很方便地获取所需的信息。

一、基本查询数据

1.查询“stu”表中所有数据

select * from stu;

2.查询“stu”表中所有数据,根据年龄从大到小(降序排序:order by 字段名 desc)显示

select * from stu order by age desc;

3.查询“stu”表中所有数据,根据年龄从小到到(升序排序:order by 字段名 asc)显示

select * from stu order by age asc;

4.查询“stu”表中“id、name、age”三个指定字段的所有数据

select id,name,age from stu;

5.查询“stu”表中“id,name,age”三个指定字段的所有数据,以第二个字段(name)进行排序

select id,name,age from stu order by 2;

6.去除重复数值

select distinct 字段名 from 表名;

7.Where子句常用查询条件

“=“ 等于

“<“ 小于

“<=“ 小于等于

“>” 大于

“>=“ 大于等于

“!=“ 不等于

“<>” 不等于

8.查询“stu”表中"age">18 的所有数据

select * from stu where age>18;

9.查询“stu”表中"age"在17和20 的所有数据

select * from stu where age in(17,20);

10.查询“stu”表中“age”在15到21这个范围内的所有数据

select * from stu where age between 15 and 21;

11.查询“stu”表中“name”为“张”开头的所有数据(like:模糊查询)

select * from stu where name like '张%';

下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符

12.查询“stu”表中“age”在17和18并且“name”为“张”开头的所有数据

select * from stu where age in (17,18) and name like '张%';

13.查询“stu”表中“age”在17和18或者“name”为“张”开头的所有数据

select * from stu where age in (17,18) or name like '张%';

当AND与OR一起使用时,AND要比OR先运算;注:但这个例子有点看不出来,广大网友有没有什么好例子 可以评论出来

14.LIMIT限制查询结果的数量

LIMIT不指定初始位置,从第一条记录开始显示。语法规则如下:

LIMIT 记录数

limit (n,m)

n:开始位置

m:要检索的行数

行0 :检索出来的第一行为行0,而不是行1, 因此,limit 1,1将检索出第二行而不是第一行。

查询“stu”表中前3行所有数据

select * from stu limit 3;

查询“stu”表中前5行所有数据

select * from stu limit 5;

查询“stu”表中的2行数据但从行0开始查询

select * from stu limit 0,2;

查询“stu”表中的2行数据但从行1开始查询

select * from stu limit 1,2;

15.查询“stu”表中所有数据,以"age"字段进行升序进行排序,但只显示五行数据

select * from stu order by age asc limit 5;

16.查询“stu”表中"age"的数据,分组进行显示

select age from stu group by age;

二、集合函数

集合函数包括:COUNT()、SUM()、AVG()、MAX()、MIN()。

当需要对表中的记录求和、求平均值、查询最大值和查询最小值等操作时,可以使用集合函数。GROUP BY关键字通常需要与集合函数起使用。

  • COUNT()用来统计记录的条数;
  • SUM()用来计算字段的值的总和;
  • AVG()用来计算字段的值的平均值:
  • MAX() 用来查询字段的最大值;
  • MIN()用来查询字段的最小值;

1.查询“stu”表中总共有多少条数据

select count(*) from stu;

2.查询“stu”表中"age"的总和

select sum(age) from stu;

3.查询“stu”表中"age"的平均值

select avg(age) from stu;

4.查询“stu”表中"age"的最大值

select max(age) from stu;

5.查询“stu”表中"age"的最小值

select min(age) from stu;

三、正则表达式查询

正则表达式是用某种模式去匹配一类字符串的一一个方式。例如,使用正则表达式可以查询出包含A、B和C其中任一字母的字符串。正则表达式的查询能力比通配字符的查询能力更强大,而且更加的灵活。正则表达式可以应用于非常复杂查询。虽然这个使用起来有些地方和“like”有相似地方,但两者在本质上面还是不同的,你可以想象成瓷碗和不锈钢碗的区别

1.“^”查询以特定字符或者字符串开头的记录

查询“stu”表中“name”为“张”开头的所有数据

select * from stu where name regexp '^张';

2.“$”查询以特定字符或者字符串结尾的记录

查询“stu”表中“name”为“天”结尾的所有数据

select * from stu where name regexp '张$';

3.“.”匹配字符串中的任意一个字符。

查询“stu”表中“name”为“张”开头的所有数据

select * from stu where name regexp '张.';

注:“.”和“_”的区别,两个都可以代替任意一个字符进行查询“.”只能用于regexp关键字进行匹配

4.[..]字符集合。匹配所包含的任意一个字符

[]可以指定集合的区间。 如:[a-z],[1-9]

查询“stu”表中"phone"中包含5-7的所有数据

select * from stu where phone regexp '[5-7]';

5.“[^字符集合]”匹配指定字符以外的字符

查询“stu”表中"phone"中包含1-8之外的所有数据,例如下面数据(注:对于新手来说这里会比较绕 结合下面的图应该会比较清楚点)

select * from stu where phone regexp '[^1-8]';

6.正则表达式可以匹配字符串。当表中的记录包含这个字符串时, 就可以将该记录查询出来。如果指定多个字符串时,需要用符号“|”隔开。只要匹配这些字符串中的任意一个即可

查询“stu”表中“name”中包含“露和甜”的所有数据

select * from stu where name regexp '露|甜';

7.“*”和“+” 匹配多个字符, *和+都可以匹配多个该符号之前的字符。

“+”:至少表示一个字符

“*”:可以表示0个字符

查询“stu”表中"phone"中的数据8之前必须要有一个1

select * from stu where phone regexp '1+8';

8.查询“stu”表中"phone"中的数据8之前可以没有1

select * from stu where phone regexp '1*8';

9.‘{m}’或者’{m,n}’来指定字符串连续出现的次数

{m}:m是一个非负整数。匹配确定的 m 次。

{m,n}:m 和 n 均为非负整数,其中m <= n

查询“stu”表中"phone"中的数据6至少连续出现1次的所有数据

select * from stu where phone regexp '6{1}';

10.查询“stu”表中"phone"中的数据6至少连续出现2次最多连续出现4次的所有数据

select * from stu where phone regexp '6{2,4}';

四、运算符

MySQL 主要有以下几种运算符:

算术运算符:加减乘除求余,主要是用在数值计算上。

比较运算符:大于、小于、等于、不等于,主要用于数值的比较和字符串的匹配上。

逻辑运算符:与、或、非、异或等,结果只返回真值(1或者true)和假值(0或false)。

运算符优先级:

MySQL 注释符号有三种,分别如下所示

1、“#”,表示单行注释,语法“#注释内容”

2、“--”,表示单行注释,语法“-- 注释内容”

3、“/**/”,表示多行注释,语法“/*注释内容*/”

五、查询函数

1.联合查询 : UNION

查询“stu”表和“stu2”表中id,name,age字段的所有数据;

select id,name,age from stu union select id,name,age from stu2;

2.嵌套查询 : [NOT]IN、ANY、ALL、[NOT]EXISTS

1.子查询

2.子查询可以继续嵌套

3.子查询中不可以使用order by子句,只对最后结果排序

4.子查询要用括号括起来

子查询结果为集合时可用如下关键字判断

[NOT]IN [不]包含其中

ANY//ALL 任何一个//所有的

[NOT]EXISTS [不]存在

系统查询函数

select

系统用户名:system_user()

用户名:user()

当前用户名:current_user()

连接数据库用户名:session_user()

数据库名:database()

数据库版本:version()

查看当前系统版本:@@version_compile_os

show

数据库读取路径:show variables like '%basedir%';

MYSQL安装路径:show variables like '%char%';

存放目录路径:show variables like '%datadir%';

其它相关函数
  1. left(s,n) #返回字符串s最左边的字符 n是个数
  2. right(s,n) #返回字符串s最右边的字符
  3. substr(s,n,len) mid(s,n,len) #截取字符串s的第n个字符,且截取长度为len
  4. lpad(string,length,’str2’) rpad(string,length,’str’) #string:需要填充的字符串 length:填充之后的总长度 str:填充字符串,默认空格
  5. LOCATE(‘str’,’str1’) LOCATE(str,str1,pos) locate(‘a’,’locala’,5) #返回str在str1中第一次出现的位置 pos--从pos位置开始检索
  6. insert(str1,pos,len,str2) #str1:指定字符串 pos:开始被替换的位置 len:被替换字符串长度 str2:新字符串
  7. instr(field, str) #返回field字符串中出现str字符串的位置
  8. position(str1 in str2) #返回字符串中第一次出现的子字符串的位置,若没有返回0
  9. concat(str1, str2,...) select concat(“abc”,NULL,”fg”) NULL #返回结果为连接参数产生的字符串
  10. concat_ws(separator, str1, str2, ...) select concat_ws(“+”,”123”,”345”) 123+345 #用第一个参数作为连接符号将字符串连接
  11. group_concat(str1) #将group by产生的同一个分组中的值连接起来,返回一个字符串
  12. if(expr,v1,v2) select if(1<2,1,0); #expr:条件 满足条件返回V1,不满足条件返回V2
  13. case when expr then v1 else v2 end #满足expr,则返回V1,不满足则返回V2
  14. sleep(N) #执行select sleep(N)可以让此语句运行N秒
  15. oct() #转换为8进制 ord() 返回第一个字符串的第一个字符的ascii值
  16. hex() #转换为16进制
  17. char() #转换为字符串
  18. ascii() #ASCII值


总结

以上就是今天要讲的内容,本文仅仅简单介绍了MySQL查询语句一些常用的命令,总的来说,数据库学习的内容很多,需要记得命令也很多,多敲、敲多了肯定就会了~~不信的话,你试试

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐