Mysql 数据库 DQL 数据查询语言相关sql语句(简单查询,条件查询)

数据库中的相关概念

  1. 库:数据库,内部存放着所有的表、视图、索引等内容

  2. 表:是数据库存储数据的基本单位,由行和列组成

  3. 列:又称为字段,是表的基本组成单位,相当于Java类中的属性

  4. 行:是表的基本组成单位,具体数据,每行信息是一个整体,由固定字段构成。相当于Java中由类实例化出来的一个又一个的对象

SQL

  • SQL:结构化查询语言,提供了对数据库数据的增删改查操作对应的处理

SQL是一种规范,也是一种国际标准,所有的关系型数据库都支持SQL,不被MySQL独有

特点

  1. 不区分大小写

  2. 注释:

    • 单行:-- (--空格)

    • 多行:/* */

简单查询

查询所有字段
-- 查询所有列:select * from 表名(*:是通配符,表示所有列)   select * from employees
查询部分字段
 select 列名1,列名2,... from 表名
  • 也可以通过列出所有字段名的方式查询所有字段

    • 优点:

      1. 效率更快

      2. 可读性较好

      3. 可维护性较高

    • 缺点:

      1. 书写繁琐

-- 查询所有字段
SELECT * from employees
-- 查询员工id、员工工资
select employee_id,salary from employees
-- 列出所有字段名查询所有字段
select employee_id,salary,first_name,last_name,email,phone_number,job_id,commission_pct,manager_id,department_id,hiredate from employees
结果运算

+、-、*、/、%

select 列名 运算符 值  from 表名
-- 查询员工id和工资,及对工资进行加减乘除的运算
    select employee_id,salary,salary+100,salary-100,salary*100,salary/100,salary%100  from employees
别名
  • 对查询之后的结果起别名

    select 列名 as 别名,列名 as 别名,列名,...  from 表名
  • 别名可以省略单引号

    标准SQL中没有双引号,字符串通过单引号修饰

  • as关键字可省

  
  -- 查看员工id和员工工资
   select employee_id as 员工id,salary as 工资 from employees
    -- as关键字可省
   select employee_id 员工id,salary 工资 from employees
去重
select distinct 列名1,列名2,.. from 表名
  • -- 查询所有的职位id(根据job_id进行去重)
    select distinct job_id from employees
    -- 查询所有的职位和部门id(根据job_id和department_id去重)
    select distinct job_id,department_id from employees

    当去重规则为多个字段时,只有当多个字段的值都相同时才会去重


分支-case when
case
   when 条件1 then 结果1
   when 条件2 then 结果2
   ...
   else 其他结果
end
-- 满足when中的条件,便执行对应then中的结果,如果when都不满足,则最终执行else,从上往下判断
-- 查询员工id、员工工资、工资等级(工资>=15000 高薪,工资>=10000 中薪,工资>=5000  一般,工资<5000  低薪)
select employee_id 员工id,salary 员工工资,
    case
        when salary>=15000 then '高薪'
        when salary>=10000 then '中薪'
        when salary>=5000 then '一般'
        else '低薪'
    end  as 薪资等级
from employees
查看表详情
  • 表详情:当前表的字段设计

describe 表名-- describe关键字可以简写为desc
-- 查看员工表详情
describe employees
desc employees

条件查询

  • 能够支持的关系运算符:> < >= <= != =

单条件查询
select 列名... from 表名  where 筛选条件
  • MySQL中对比字符串时默认不区分大小写,若想区分,则在对应字段前添加binary关键字即可

-- 查询工资大于10000的员工信息
select * from employees where salary>10000
-- 查询部门id<50的员工信息
select * from employees where department_id<50
-- 查询起始名为Steven的员工信息-不区分大小写
select * from employees where first_name='steven'
-- 区分大小写
select * from employees where binary first_name='Steven'
多条件查询
where 条件1 连接符 条件2
连接符:
and:表示并且,意为同时满足,相当于Java中的&&
or:表示或者,意为满足任意一个即可,相当于Java中的||
-- 查询员工工资>10000并且部门id<50的员工信息
select * from employees where salary>10000 and department_id<50
-- 查询员工id<120或者部门id=80的员工信息
select * from employees where employee_id<120 or department_id=80
区间查询
where 列名 [not] between 起始值 and 结束值
  • 中括号中的内容意为可省

  • 加上not表示不在此区间之内

-- 查询工资大于10000并且小于12000的员工信息
select * from employees where salary>=10000 and salary<=12000
-- 区间查询(在范围内):between 起始值 and 结束值
select * from employees where salary between 10000 and 12000
-- 区间查询(不在范围内):not between 起始值 and 结束值
select * from employees where salary not between 10000 and 12000
枚举查询
where 列名 [not] in(值1,值2,...)
-- 查询部门id是10、20、30的员工信息
select * from employees where department_id=10 or department_id=20 or department_id=30
-- 枚举查询(列举字段所有满足条件的值):列名 in(值1,值2,...)
select * from employees where department_id in(10,20,30)
-- 不在范围内:列名  not in(值1,...)
select * from employees where department_id not in(10,20,30)
空值查询
where 列名 is [not] null
-- 查询没有绩效的员工信息
-- 为空:列名 is null
select * from employees where commission_pct is null
-- 不为空:列名 is not null
select * from employees where commission_pct is not null
模糊查询
where 列名 [not] like '通配模式'
?
可用占位符:
%:表示n个字符
_:表示1个字符
-- 查询起始名以p开头的员工信息
select * from employees where first_name like 'p%'
-- 查询起始名中包含p的员工信息
select * from employees where first_name like '%p%'
-- 查询起始名第二个字母是a的员工信息
select * from employees where first_name like '_a%'
-- 查询起始名由5个字母组成的员工信息
select * from employees where first_name like '_____'