MySQL学习笔记4 DQL

一、概念

DQL为数据查找

/* 
1.根据需要对数据进行筛选
2.确定数据以什么样的方式显示
3.使用select语句来查找数据
*/

二、基本查询指令 select

1.select

/*语法格式
  select
  [all|distinct]
  <目标列表达式1>[别名],
  <目标列表达式2>[别名]...
  from <表名或视图名> [别名],<表名或视图名>
  [where<条件表达式>]
  [group by <列名>]
  [having <条件表达式>]
  [order by <列名> [asc|desc]]
  [limit <数字或列表>]
  */
#简化: select *|列名 from 表 where 条件

现创建名为emp的员工列表,包含性别,id ,姓名等信息如

VALUES (2, '00002', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
-- 1.查询所有员工
select * from emp;

-- 2.查询员工名以及员工年龄
select name,age from emp;

2.别名查询

-- 表别名:
select *
from emp as p;
#多表查询时会使用别名来区分

-- 列别名
select pname as '商品名',price '商品价格' from product;

3.去除重复值

select distinct gender from emp;

4.查询结果是表达式(运算查询)

select name,concat(gender,'孩子') '性别' from emp;
#字符串拼接 concat(str1,str2)

三、运算符

/*
  - 算数运算符
  - 比较运算符
  - 逻辑运算符
  - 位运算符
  */

1.算数运算符(略)

2.比较运算符

1.<=> 安全等于,两个操作码均为NULL其所得为1;一个为NULL时所得值为零
2.is NULL 判断值是否为NULL
3.LEAST 返回最小值
4.GREATEST 最大值
5.BETWEEN AND 两数值之间
6.IN 列表中一个值
7.LIKE 通配符匹配 -- %为通配符
8.REGEXP 正则表达式匹配

3.逻辑运算符

1. NOT/! 逻辑非
2. AND/&& 逻辑与
3. OR/|| 逻辑或
4. XOR 逻辑异或

4.位运算符

1. | 按位或
2. & 按位与
3. ^ 按位异或
4. << / >> 按位左移 / 右移
5. ~ 按位取反

四、综合使用示例

-- 查找表emp内所有信息
select *
from emp;

-- 查找姓名为李静的员工的所有信息
select *
from emp
where name = '李静';

-- 查询编号大于6的员工
select *
from emp
where id > 6;

-- 查找名字带'牛'的员工
select *
from emp
where name like '%牛%'; #  '%'匹配任意字符串

-- 查找姓名以丰结尾的三字名员工
select *
from emp
where name like '__丰'; #  '_'匹配单个字符

-- 查找性别为NULL的员工
select *
from emp
where gender is NULL; # 不能使用=匹配NULL 需要使用is

-- 求最小/大值
select least(10,2,5) #返回2
select least(10,NULL,5) #返回NULL :无法比较NULL

select greatest(10,2,5);#返回10

五、高级查询指令

1.排序查询 order by

-- 字段名1 [asc]升序(默认) , 字段名2[desc]降序

例1.按照身份证号降序查询

select *
from emp
order by idcard desc;

例2.按照性别升序排列的基础 按照序号降序排列

select *
from emp
order by gender,id desc;

2.聚合查询

/* 1.常见的聚合函数
count() 统计指定列不为NULL的记录行数
   count()参数为* 时统计所有记录的个数(包含NULL)
sum() 计算指定列的数值和 非数值类型结果为0
max() 计算指定列最大值 字符串类型进行排序运算
min() 计算最小值 同上
avg() 计算指定列的平均值
   上述四条函数忽视NULL值的存在
*/

示例

-- 1.查询员工总人数
select count(name) as '员工人数'
from emp;

-- 同时也可写为下列形式
select count(*) as '员工人数'
from emp;

-- 查询男性员工数目
select count(*)
from emp
where gender = '男';

-- 查询员工年龄总和
select sum(age) as '总年龄'
from emp;

-- 查询年龄最小的员工
select min(age) as '员工最小年龄'
from emp;

-- 查询员工平均年龄
select avg(age) as '员工平均年龄'
from emp;

3.分组查询 group by

# 格式:select 字段1,字段2... from 表名 group by 分组字段 having 分组条件

示例

-- 1.统计各个性别的员工个数
select gender,count(idcard)
from emp
group by gender;

-- 2.可以多个字段匹配各字段相同的元素
select gender,id<13,count(idcard)
from emp
group by gender,id<13;

4.分组之后的条件筛选 having

/*
不能使用where筛选分组之后的统计结果
需要使用having
select 字段1,字段2... from 表名 group by 分组字段 having 分组条件;
*/

示例

-- 分性别统计员工个数,且只显示大于6的结果
select gender, count(name) bg
from emp
group by gender
having bg > 6;

5.分页显示 limit

/*
-- 方式1,显示前n条
select 字段1,字段2... from 表名 limit n
-- 方式2,分页显示
select 字段1,字段2...from 表名 limit m,n
查询从m到n的序号的内容
-注意序号从0开始
*/

-- 查询emp表前5条记录
select *
from emp
limit 5;

-- 查询从第四条开始 显示五条
select *
from emp
limit 3,5;

6.数据表导入 insert into select

/*
将数据表1的内容导入到数据表2中
insert into Table2 select * from Table1
*/

示例

-- 将emp中的员工名称单独导入到emp_name的表中
insert into emp_name (name)
select name from emp;
  • 42
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值