mysql查询姓名第二个字_mysql数据库(二)——表的查询

1.单表查询

1.1 查询语法

SELECT 字段1,字段2... FROM 表名

WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数

1.2 关键字优先级

from

where

group by

having

select

distinct

order by

limit

(1)找到表:from(2)拿着where指定的约束条件,去文件/表中取出一条条记录(3)将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

(4)将分组的结果进行having过滤(5)执行select(6)去重(7)将结果按条件排序:order by(8)限制结果的显示条数

1.3 简单查询

(1)select * from table; 查询表内所有数据

(2)select [字段名n1,n2...] from table; 查询指定字段数据

(3)select distinct 字段名 from table; 避免重复

(4)concat() 用于连接字符串

例如:select concat(‘姓名:‘,name) ‘姓名‘  from employee;

(5)concat_ws() 第一个参数作为分隔符

mysql> select concat_ws(‘:‘,‘姓名‘,name) ‘姓名‘ from employee;

+-------------------+

| 姓名 |

+-------------------+

| 姓名:xxx         |

1.4 where约束

where常用约束:

(1)比较运算符:> 、=、 <=、 <>、 !=

(2)between...and...

(3)in(值1,值2...)

(4)like ‘% or _‘ ,pattern可以是%或_ ,%表示任意多字符,_表示一个字符

(5)逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

1.5 group by

分组是基于where之后得到的记录而进行的,将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等

单独使用GROUP BY关键字分组

SELECT post FROM employee GROUP BY post;

注意:我们按照post字段分组,那么select查询的字段只能是post,想要获取组内的其他相关信息,需要借助函数

GROUP BY关键字和GROUP_CONCAT()函数一起使用

SELECT post,GROUP_CONCAT(name) FROM employee GROUP BY post;#按照岗位分组,并查看组内成员名

SELECT post,GROUP_CONCAT(name) as emp_members FROM employee GROUP BY post;

GROUP BY与聚合函数一起使用

select post,count(id) as count from employee group by post;#按照岗位分组,并查看每个组有多少人

1.6 having

执行优先级从高到低:where > group by > having

Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数

Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

1.7 order by

按单列排序

SELECT * FROM employee ORDER BY salary;

SELECT * FROM employee ORDER BY salary ASC;

SELECT * FROM employee ORDER BY salary DESC;

按多列排序:先按照age排序,如果年纪相同,则按照薪资排序

SELECT * from employee

ORDER BY age,

salary DESC;

1.8 limit

示例:

SELECT * FROM employee ORDER BY salary DESC

LIMIT 3; #默认初始位置为0

SELECT * FROM employee ORDER BY salary DESC

LIMIT 0,5; #从第0开始,即先查询出第一条,然后包含这一条在内往后查5条

SELECT * FROM employee ORDER BY salary DESC

LIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查5条

1.9 正则查询

SELECT * FROM employee WHERE name REGEXP ‘^ale‘;

SELECT * FROM employee WHERE name REGEXP ‘on$‘;

SELECT * FROM employee WHERE name REGEXP ‘m{2}‘;

小结:对字符串匹配的方式

WHERE name = ‘egon‘;

WHERE name LIKE ‘yua%‘;

WHERE name REGEXP ‘on$‘;

2 多表查询

2.1 多表连接查询

2.1.1 交叉连接:不适用任何匹配条件。生成笛卡尔积

select 字段列表 from 表1,表2;

2.1.2 内连接:只连接匹配的行

select 字段列表 from 表1 inner join 表2

on 表1.字段名 = 表2.字段名

2.1.3 左连接:优先显示左表

select 字段列表 from 表1 left join 表2

on 表1.字段名 = 表2.字段名

2.1.4 右连接:优先显示右表

select 字段列表 from 表1 right join 表2

on 表1.字段名 = 表2.字段名

2.1.5 全连接:显示左右两个表全部记录

#!mysql不支持全外连接 full JOIN

select 字段列表 from 表1 left join 表2

on 表1.字段名 = 表2.字段名

union

select 字段列表 from 表1 right join 表2

on 表1.字段名 = 表2.字段名

注:union会去掉相同记录

2.2 条件约束连接查询

SELECT 字段列表

FROM 表1 INNER|LEFT|RIGHT JOIN 表2

ON 表1.字段 = 表2.字段

where condition

group by

having

order by

limit

2.3 子查询

(1)子查询是将一个查询语句嵌套在另一个查询语句中。(2)内层查询语句的查询结果,可以为外层查询语句提供查询条件。(3)子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字(4)还可以包含比较运算符:= 、 !=、> 、

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值