《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·007【简单查询】

一、select语句

1、作用

select语句具备以下功能:

  • 选择
  • 投影
  • 连接

2、语法

select语句格式如下:

select [distinct] * from 表名;
select [distinct] 列名列表 from 表名;
select [distinct] 表达式 [from 表名];

注:select * from 表名select 所有列 from 表名结果虽然一样,但是从性能上讲select * from 表名的性能要差一点。因此在数据量很大的时候,如果要查询所有值,还是建议用select 所有列 from 表名进行查询

3、空值处理

任何直接包含null值的算术表达式运算后的结果仍然为空值

select null + 100;  -- 结果仍为null

ifnull(表达式1, 表达式2)在计算时对null值进行替换处理:当表达式1为null时,整个式子值为表达式1,否则值为表达式2
注:MySQL中的ifnull函数,可以相当于Oracle中的nvl函数

select ifnull(1, 2);     -- 结果为1
select ifnull(null, 2);  -- 结果为2

4、反引号、单引号、双引号

反引号

反引号用于区分保留字、关键字与其他内容,通常用于列名或者表名。

select `name` from `use`;

单引号

表达某个字符串的值。

select * from emp where ename = 'smith';

如果值中包含单引号,可以在单引号字符串内用两个单引号转义,也可以用在双引号字符串内直接用一个单引号(推荐用法)

select * from emp where ename = 'smi''th';
select * from emp where ename = "smi'th";  -- 推荐写法

双引号

通常用于列的别名,也可以用于表达字符串的值

select * from emp where ename = "smith";

如果值中包含双引号,可以在双引号字符串内用两个双引号转义,也可以用在单引号字符串内直接用一个双引号(推荐用法)

select * from emp where ename = "smi""th";
select * from emp where ename = 'smi"th';  -- 推荐写法

5、列和表的别名

列的别名

  • 用法

    列名 新列名  -- 写法1
    列名 as 新列名  -- 写法2
    
  • 注意事项

    当新列名中包含空格、大小写、特殊字符时,新列名可以使用反引号、单引号、双引号

  • 英文转中文的常用场景
    - 查询中SQL语句别名
    - 视图中SQL语句别名
    - 前端页面展示页面处理

  • 使用示例

    select ename as 姓名, sal as 工资
    from emp;
    
    select enmae as `NAME`, sal*12 as "年 薪"
    from emp;
    

6、distinct去重

使用distinct关键字消除查询结果的重复行

select job from emp;
select distinct job from emp;

7、查询表结构

使用desc关键字查询表结构

desc 表名;

8、条件查询

(1).限定条件

使用where子句增加查询限定条件

select [distinct] 列名列表
from 表名
where 条件表达式;

(2).常用比较运算符

运算符含义
=等于
>大于
>=大于等于
<小于
<=小于等于
<>不等于

注意:日期一般不建议使用比较运算符,统一使用日期函数


(3).特殊比较运算符

between ... and ...

between A and B判断要比较的值是否在范围 [ A , B ] [\text{A}, \text{B}] [A,B]


注意:

  • A > B \text{A} > \text{B} A>B,则between A and B表达式值为false
  • 也可以用于日期的范围

in

in的功能类似于or,判断某个/某些字段是否落在某个集合中


注意:

  • in支持多列同时判断,但是仅支持子查询

使用示例:

-- 单列判断
select from emp where mgr in(7902, 7566);

-- 多列同时判断
select from emp where (job, mgr) in ('CLERK', 7902);         -- 错误写法
select from emp where (job, mgr) in (select 'CLERK', 7902);  -- 正确写法

like

like运算符用于模糊查询。


注意:

  • 支持通配符——%匹配任意个字符、_匹配单个字符
  • 通常与函数concat(str1, str2, ...)配合使用,这一点主要是便于配合后端程序的使用,比如Java
  • SQL Server中大量存在类似正则表达式书写方式来表示范围的[]运算符,但是MySQL不支持。

使用示例:

-- 查询姓名以S开头的员工
select * from emp where ename like 'S%';

-- 查询姓名包含S的员工
select * from emp where ename like '%S%';
select * from emp where ename like concat('%', 'S', '%');  -- Java中写法

is null

is null用于空值判断,与其相反的是is not null


(4).逻辑运算符

逻辑运算符包括notandor

注意:

  • not常常和其他运算符组合使用,如not innot betweennot likeis not null

  • 使用逻辑运算符要勤加括号,避免优先级问题

9、order by 子句

使用order by子句对查询结果进行排序

  • 在日常使用中,所有语句都应该提供order by
  • 排序规则:
    数值(大小)、字符串(字典序)、日期(越近越大)、空值null(最小)
  • 升序/降序:
    升序:asc(默认)
    降序:desc
  • 排序方式:
    可以根据列名、列别名、列的顺序编号进行排序
    可以设置多列排序,效果就相当于第一关键字、第二关键字……
  • 注意:
    order by的列,建议使用列索引提高查询效率
    对于计算列、函数表达式……不建议使用order by
  • 使用示例
    /* 根据某列进行排序 */
    select empno, ename, sal * 12 salOfYear
    from emp
    order by sal * 12;
    
    select empno, ename, sal * 12 salOfYear
    from emp
    order by salOfYear;
    
    select empno, ename, sal * 12 salOfYear
    from emp
    order by 3;
    
    /* 根据多列进行排序 */
    select empno, ename, hiredate, sal * 12 salOfYear
    from emp
    order by hiredate asc, salOfYear asc;
    

10、limit

使用limit关键字对查询结果进行分页

  • 格式
    select 字段列表
    from 表名
    limit [start_val, ]length;
    
    -- 从第start_val条记录开始,
    
  • 注意:
    start_val从0开始标记,可以缺省、默认值也为0
    分页时,多次查询的数据可能不一致,所以在使用limit的时候一定要使用order by
  • 使用示例
    -- 查询年薪(不带奖金)前三的相关员工信息
    select empno, ename, hiredate, sal*12 salOfYear
    from emp
    order by salOfYear desc
    limit 0, 3;
    
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

God-Excious

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值