1. 查询所有列的数据

用*代表所有列。

select * from 表名

2. 选择列

select 字段1,字段2,字段3… from 表名

3. 选择行

  1. 等值

    select … from 表名 where 字段 = 条件

  • 如查询salaries表中salary超过10000的信息
    1. select *
    2. from salaries
    3. where salary > 10000;
  1. IN:检查一个值是否在一组值中
  • 如查询表employees中姓名为kangkang,jack的员工。
    select *
    from employees
    where name in ('kangkang','jack')
    
  1. between … and: 检查一个值是否在一个范围内,常用于数字和日期。
  • 如查询salaries表中salary在8000到10000的信息。
    select *
    from salaries
    where salary between 8000 and 10000;
    
  1. like简单模式匹配:’_’来精确匹配一个字符,’%’来匹配任意数量的字符。
  • 如查询employees表中姓常的员工。

    select *
    from employees
    where name like '常%';
    
  • 查询姓赵并且名字共2个字的员工。

    select *
    from employees
    where name like '赵_';
    
  1. 正则表达式

可以使用rlike或regexp函数在where子句中使用正则表达式。

  • 如找出名字以字母J开头的员工信息

    select *
    from employees
    where name rlike '^J';
    
  • 找出姓名以薇结尾的人员信息

    select *
    from employees 
    where name regexp '薇$';
    

常用正则表达式表

序号 表达式 描述 序号 表达式 描述
1 * 零次或重复多次 11 [0-9] 数字0到9
2 + 一个或多个重复 12 ^…$ 开始和结束
3 ? 可选字符 13 \d 任何数字
4 . 任意字符 14 \D 任何非数字字符
5 \. 区间 15 \s 任何空格
6 ^ 以······开始 16 \S 任何非空白字符
7 $ 以······结束 17 \w 任何字母数字字符
8 [abc] abc三者任选其一 18 \W 任何非字母数字字符
9 [^abc] 非a,非b,亦非c 19 {m} m次重复
10 [a-z] 字符a到z,即任意英文字母 20 {m,n} m到n次重复

4. 限定结果limit

在查询的结尾使用limit来实现该效果。

  • 如只显示10条查询信息

    select first_name,second_name
    from employees
    where salary > 10000
    limit 100;
    

    5. 对结果排序order by

  • 如查询薪水最高的前10位员工的工号和姓名

    select emp_no,name
    from salaries
    order by salary desc -- desc表示降序,asc表示升序,默认为升序
    limit 10
    

    6. 去重distinct

  • 如对员工工号进行去重查询

    select distinct emp_no
    from employees