SELECT

格式:

  1. SELECT
  2. {* | <字段列名>}
  3. [
  4. FROM <表 1>, <表 2>…
  5. [WHERE <表达式>
  6. [GROUP BY <group by definition>
  7. [HAVING <expression> [{<operator> <expression>}…]]
  8. [ORDER BY <order by definition>]
  9. [LIMIT[<offset>,] <row count>]
  10. ]

查找表中所有字段

  1. select * from 表名;

查找专业名为电子商务的学生信息

  1. -> select 姓名,专业名
  2. -> from xs
  3. -> where 专业名='电子商务';
  4. +--------+----------+
  5. | 姓名 | 专业名 |
  6. +--------+----------+
  7. | 骆瑜 | 电子商务 |
  8. | 李老三 | 电子商务 |
  9. | 张三 | 电子商务 |
  10. +--------+----------+

去重 DISTINCT

去除查询结果中重复的项

如果有多个字段,则是消除他们的组合重复项

  1. SELECT DISTINCT <字段名> FROM <表名>;
  1. mysql> select 专业名 from xs;
  2. +----------+
  3. | 专业名 |
  4. +----------+
  5. | 电子商务 |
  6. | 通信工程 |
  7. | 电子商务 |
  8. | 通信工程 |
  9. | 电子商务 |
  10. +----------+
  11. #使用DISTINCT后:
  12. mysql> select DISTINCT 专业名 from xs;
  13. +----------+
  14. | 专业名 |
  15. +----------+
  16. | 电子商务 |
  17. | 通信工程 |
  18. +----------+

设置别名AS

将name设置为 student_name,age设置成student_age

  1. mysql> SELECT name AS student_name, age AS student_age FROM tb_students_info;
  2. +--------------+-------------+
  3. | student_name | student_age |
  4. +--------------+-------------+
  5. | Dany | 25 |
  6. | Green | 23 |
  7. | Henry | 23 |
  8. | Jane | 22 | |
  9. +--------------+-------------+

CASE..END

  1. select 学号,姓名,总学分
  2. case
  3. when 总学分 is null then '尚未选课'
  4. when 总学分 <50 then '不及格'
  5. when 总学分 >=50 and 总学分 <= 52 then '及格'
  6. else '优秀'
  7. end as 等级
  8. from xs
  9. where 专业名='计算机';

限制查询 LIMIT

  1. <LIMIT> [<位置偏移量>,] <行数>

在 tb_students_if表中,使用LIMIT字句返回从第4条记录开始后面的5行语句

mysql> SELECT * FROM tb_students_info LIMIT 3,5;#第四行开始,后面查询五条
+----+-------+---------+------+------+--------+------------+
| id | name  | dept_id | age  | sex  | height | login_date |
+----+-------+---------+------+------+--------+------------+
|  4 | Jane  |       1 |   22 | F    |    162 | 2016-12-20 |
|  5 | Jim   |       1 |   24 | M    |    175 | 2016-01-15 |
|  6 | John  |       2 |   21 | M    |    172 | 2015-11-11 |
|  7 | Lily  |       6 |   22 | F    |    165 | 2016-02-26 |
|  8 | Susan |       4 |   23 | F    |    170 | 2015-10-01 |
+----+-------+---------+------+------+--------+------------+

查询结果排序 ORDER BY

ORDER BY {<列名> | <表达式> | <位置>} [ASC|DESC]

1) 列名: 指定用于排序的列。可以指定多个列,列名之间用逗号分隔。

2) 表达式 : 指定用于排序的表达式。

3) 位置 : 指定用于排序的列在 SELECT 语句结果集中的位置,通常是一个正整数。

4) ASC|DESC :

关键字 ASC 表示按升序分组,关键字 DESC 表示按降序分组,其中 ASC 为默认值。这两个关键字必须位于对应的列名、表达式、列的位置之后。

先按课程号升序排序,然后按成绩降序排序

也就是课程号相同的情况下再按成绩排序

mysql> select * from score
    -> ORDER BY 课程号 ASC,成绩 DESC;
+-------+--------+--------+------+----------+
| 学号  | 课程号 | 课程名 | 成绩 | 成绩情况 |
+-------+--------+--------+------+----------+
| 23130 |      1 | 数据库 |  100 | 合格     |
| 81211 |      1 | 数据库 |   66 | 合格     |
| 85531 |      1 | 数据库 |   56 | 不合格   |
| 23130 |      2 | Java   |   98 | 合格     |
| 85531 |      2 | Java   |   87 | 合格     |
| 81211 |      2 | Java   |   55 | 不合格   |
+-------+--------+--------+------+----------+

例子

select 学号,成绩*1.20 as 成绩120