MySQL单表查询

来源:互联网 发布:梦里花落知多少解释 编辑:程序博客网 时间:2024/05/19 17:48

摘要:

这是一篇关于MySQL的文章,主要介绍MySQL单表查询


MySQL单表查询

0. 试验表

mysql> desc employee;+-----------------+-----------------------+------+-----+---------+----------------+| Field           | Type                  | Null | Key | Default | Extra          |+-----------------+-----------------------+------+-----+---------+----------------+| emp_id          | int(11)               | NO   | PRI | NULL    | auto_increment || emp_name        | varchar(30)           | YES  |     | NULL    |                || sex             | enum('male','female') | YES  |     | NULL    |                || hire_date       | date                  | YES  |     | NULL    |                || post            | varchar(50)           | YES  |     | NULL    |                || job_description | varchar(100)          | YES  |     | NULL    |                || salary          | double(15,2)          | YES  |     | NULL    |                || office          | int(11)               | YES  |     | NULL    |                || dep_id          | int(11)               | YES  |     | NULL    |                |+-----------------+-----------------------+------+-----+---------+----------------+9 rows in set (0.06 sec)

1. 简单查询

  • select 查询字段

  • 避免重复DISTINCT,跟在select后面

  • 使用简单的四则运算(+, -, *, /或DIV,%或MOD)

  • 使用AS产生新字段

1. select post, salary*12 AS Annual_Salary from employee;2. select post, salary*12 Annual_Salary from employee;
  • 定义显示格式

CONCAT函数用于连接字符串

select concat(emp_name, ' annual_salary: ', salary * 12) AS annual_salary from employee;

2. 通过条件查询

  • 条件表达式

比较运算符
>, <, =, !=, >=, <=

逻辑运算符
AND或&&,OR或||,XOR,NOT或!

  • 语法格式
SELECT 字段1,字段2..  FROM 表名  WHERE CONDITION[AND CONDITION];
  • 关键字BETWEEN

在一个范围之内

可以在BETWEEN前加上一个NOT

  • 关键字IS NULL

查找某个字段是否为NULL

  • 关键字IN集合查询
mysql> select emp_name, salary from employee    -> where salary in (4000, 5000, 6000, 9000);+----------+---------+| emp_name | salary  |+----------+---------+| jack     | 5000.00 |+----------+---------+1 row in set (0.00 sec)-- 以上语句等价于如下语句mysql> select emp_name, salary from employeewhere salary = 4000 or salary = 5000 or salary = 6000 or salary = 9000;
  • 关键字LIKE进行模糊查询

通配符

%代表的是0到多个字符

_代表的是一个字符

3. 查询排序

-- 通过salary来进行升序排序,再根据入职日期按照降序排列。-- 即如果salary相同,再来比较hire_datemysql> select emp_name, salary, hire_date from employee order by salary ASC, hire_date DESC;+-----------+-----------+------------+| emp_name  | salary    | hire_date  |+-----------+-----------+------------+| xff       |      NULL | NULL       || tianyun   |    600.00 | 2016-02-22 || christine |   2200.00 | 2016-02-26 || jack      |   5000.00 | 2016-02-22 || tom       |   5500.00 | 2016-02-22 || alice     |   7200.00 | 2016-02-23 || robin     |   8000.00 | 2016-02-22 || harry     |  60000.00 | 2016-02-22 || emma      | 200000.00 | 2016-02-22 |+-----------+-----------+------------+9 rows in set (0.00 sec)

4. 限制查询记录数

-- 限制输出两个-- 从第三条开始输出,输出两条select emp_name, dep_id from employee where dep_id = 100 LIMIT 2, 2;-- LIMIT的起始位置从0开始

5. 使用集合函数

  • count: 对结果进行计数。

  • max: 查询结果中的最大值

  • min: 查询结果中的最小值

  • avg: 查询结果的平均值

  • sum: 查询结果的和

6. 分组查询

  • GROUP BY单独使用显示每个分组的第一个员工
mysql> select emp_id, dep_id from employee group by dep_id;+--------+--------+| emp_id | dep_id |+--------+--------+|      9 |   NULL ||      1 |    100 ||      5 |    101 ||      7 |    102 |+--------+--------+4 rows in set (0.00 sec)
  • GROUP BYGROUP_CONCAT一起使用
-- 将每个分组(dep_id)的对应字段(emp_name)连接起来mysql> select dep_id,group_concat(emp_name) from employee group by dep_id;+--------+------------------------+| dep_id | group_concat(emp_name) |+--------+------------------------+|   NULL | xff                    ||    100 | jack,tom,robin,alice   ||    101 | tianyun,harry          ||    102 | emma,christine         |+--------+------------------------+4 rows in set (0.00 sec)
  • GROUP BY和集合函数一起使用
-- 对每个分组(dep_id)的相应字段(emp_name)进行count统计mysql> select dep_id,count(emp_name) from employee group by dep_id;
  • GROUP BYHAVING一起使用
-- having表示对分组进行条件筛选mysql> select dep_id,group_concat(emp_name) from employee group by dep_id having count(emp_name)) > 2;+--------+------------------------+| dep_id | group_concat(emp_name) |+--------+------------------------+|    100 | jack,tom,robin,alice   |+--------+------------------------+1 row in set (0.00 sec)
  • 按多个字段进行分组
-- 使用了多个分组条件(dep_id 和 post)mysql> select dep_id, post, group_concat(emp_name) from employee group by dep_id,post;+--------+------------+------------------------+| dep_id | post       | group_concat(emp_name) |+--------+------------+------------------------+|   NULL | wife       | xff                    ||    100 | instructor | jack,tom,robin,alice   ||    101 | hr         | tianyun,harry          ||    102 | sale       | emma,christine         |+--------+------------+------------------------+4 rows in set (0.00 sec)

7. 正则表达式

-- 使用正则表达式对字符类型字段进行匹配mysql> select emp_name from employee where emp_name REGEXP '^ali';+----------+| emp_name |+----------+| alice    |+----------+1 row in set (0.00 sec)
原创粉丝点击