MySQL——查询

一、SQL语言规范

  1. MySQL在Windows环境下大小写不敏感。

  2. MySQL在Linux环境下大小写敏感。

  3. 推荐的书写规范:

    (1) 数据库名、表名、表别名、字段名、字段别名等都小写。

    (2) SQL关键字、函数名、绑定变量等都大写。

  4. 注释规则:

    (1) 单行注释:#注释文字(MySQL特有)

    (2) 单行注释:-- 注释文字(–后有一个空格)

    (3) 多行注释:/* 注释文字 */

  5. 数据导入指令:(dos窗口执行) source 要导入的文件的绝对路径

二、基本的SELECT语句

1. 列的别名

(1)相当于重命名一个列,便于计算,方法是紧跟列名,也可以在列名和别名之间加入关键字 AS ,别名使用双引号 (别名包含空格时的命名方法)。

(2)举例:SELECT employee_name emp , last_name AS name FROM employees;

(3)注意:列的别名不可以在WHERE语句中使用,因为执行顺序为FROM–>WHERE–>SELECT

2. 去除重复行

(1)在SELECT语句中使用关键字DISTINCT去除重复行

(2)举例:SELECT DISTINCT department_id FROM employees;

(3)DISTINCT是对其后的所有字段都去除重复行,一般只跟一个字段。

3. 空值参与运算

(1)所有的运算符或列值遇到null值,运算结果都为null

(2)在MySQL中,空值null不等于空字符串,空字符串的长度是0,空值的长度是空,空值是占用空间的

4. 着重号``

(1)着重号是为了保证表中的字段、表名等没有和关键字。保留字、数据库系统或者常用方法的名字发生冲突。如果真的相同,命名是必须用一对着重号引用起来。如`SELECT`

(2)SELECT查询还可以对常数进行查询。即在查询结果中增加一列固定的常数列,这一新的常数列的取值可以由自己指定。(常数列可以作为这个表的标记)

(3)举例:SELECT last_name , ‘888’ AS sign FROM employees;

5. 显示表结构

(1)使用DESC或者DESCRIBE显示表结构,如:DESCRIBE employees; 或者DESC employees;

(2)各个字段的含义:

  • Field:表示字段名称
  • Type:表示字段类型
  • Null:表示该列是否可以存储NULL值
  • Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次
  • Default:表示该列是否有默认值,如果有,那么值是多少
  • Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等

三、运算符

①比较运算符
1. 等号运算符(=)

①判断等号两边的值、字符串、表达式是否相等,相等返回1,不相等返回0

②如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较,当字符串无法转化为数字时,自动转化为0进行比较。如,1=‘1’,返回1,1=‘a’,返回0,0=‘a’,返回1

③如果等号两边的值有一个是null,则结果为null

④SQL中赋值符号使用 :=

2. 不等于运算符(<>或!=)

①不等于运算符用于判断两边的数字、字符串、表达式的值是否不相等,不相等返回1,相等返回0

②不等于运算符不能判断null值。

3. 安全等于运算符(<=>)

使用安全等于运算符时,两边的操作数的值都为null时,返回的结果为1而不是null,其他返回结果与等于运算符相同。

4. 空运算符(ISNULL或者IS NULL)

①空运算符判断一个值是否为null,如果为null则返回1,否则返回0

②无论是等于还是不等于,只要两边有任意一个值为null,结果就一定为null

5. 非空运算符(IS NOT NULL)

非空运算符判断一个值是否不为null,如果不为null返回1,否则返回0

6. 最小值运算符(LEAST(值1,值2,…,值n))

①当参数列表中的参数为整数或者浮点数时,LEAST将返回最小的值。

②当参数列表中的参数为字符串时,从前往后逐个比较字符串中的第一个、第二个、第n个字符的ASCII码值大小,返回相同位置字符ASCII码最小的字符串。

③当比较值列表中有null值时,不能判断大小,返回值为null。

7. 最大值运算符(GREATEST(值1,值2,…,值n))

①当参数列表中的参数为整数或者浮点数时,GREATEST将返回最大的值。

③当比较值列表中有null值时,不能判断大小,返回值为null。

8. BETWEEN AND运算符

BETWEEN AND运算符的使用格式通常为

SELECT D

FROM TABLE

WHERE C BETWEEN A AND B

此时,当C>=A并且C<=B时,结果为1,否则结果为0

9. IN运算符

①IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。

②如果给定的值为NULL,IN列表中不存在NULL,则结果为NULL。

10. NOT IN运算符

①NOT IN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是则返回1,否则返回0。
②如果给定的值为NULL,或者NOT IN列表中存在NULL,则结果为NULL。

11. LIKE运算符

①LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。

②如果给定的值或者匹配条件为null,则返回结果为null。

③“%”匹配0个或者多个字符;“_”只能匹配一个字符。

例如:

SELECT last_name 

FROM employees 

WHERE last_name LIKE '_o%';

查询的结果为last_name这一列中符合 第一个字符为任意字符;并且第二个字符为o;并且第二个字符后面有任意0个或者多个字符的值。

④回避特殊符号的,使用转义字符’ \ ’ ,如’ \ _ ‘可以代表单个字符’_'。

12. REGEXP运算符

①REGEXP运算符用来匹配字符串,语法格式为xxx REGEXP 匹配条件 ,满足返回1,否则返回0。

②常用的几种通配符:

  • ‘^’匹配以该字符后面的字符开头的字符串
  • ‘$’匹配以该字符前面的字符结尾的字符串
  • ‘.’匹配任何一个单字符
  • “[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”或“b”或“c”。“[a-z]”匹配所有小写字母,而“[0-9]”匹配任何数字
  • ‘*’匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的‘x’字符,“[0-9]*”匹配任何数量的数字,而“*”匹配任何数量的任何字符
②逻辑运算符
1. 逻辑非运算符(NOT或!)

逻辑非(NOT或!)运算符表示当给定的值为0时返回1;当给定的值为非0值时返回0; 当给定的值为NULL时,返回NULL

2. 逻辑与运算符(AND或&&)

逻辑与(AND或&&)运算符是当给定的所有值均为非0值,并且都不为NULL时,返回 1;当给定的一个值或者多个值为0时则返回0;否则返回NULL

3. 逻辑或运算符(OR或||)

逻辑或(OR或||)运算符是当给定的值都不为NULL,并且任何一个值为非0值时,则返 回1,否则返回0;当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;当两个值都为 NULL时,返回NULL

4. 注意

OR可以和AND一起使用,且AND的优先级高于OR,所以先AND再OR。

四、排序与分页

①排序
1. 排序规则
  • 使用ORDER BY子句实现排序
  • ASC(ascend):升序
    DESC(descend):降序
  • ORDER BY子句在SELECT语句的结尾
2. 一级排序

举例:

SELECT last_name, job_id, department_id, hire_date

FROM employees

ORDER BY hire_date ;

表示将hire_date字段进行升序排序(默认为升序排序)。

3. 多级排序

举例:

SELECT last_name, department_id, salary

FROM employees

ORDER BY department_id, salary DESC;

表示将department_id进行升序排序,然后再根据department_id对salary进行降序排序。

ORDER BY后面的第一个字段进行一级排序,然后第二个字段根据第一个字段排序完的情况进行二级排序。

②分页
  1. MySQL中使用LIMIT实现分页。格式为:LIMIT 位置偏移量,需要获取的行数;

  2. 举例:

    SELECT * FROM 表名 LIMIT 10,40;

    表示获取表格中的第11至50条记录。

  3. 注意

    LIMIT子句必须放在整个SELECT语句的最后。

五、补充

1. HAVING子句
①having子句用于对分组后的结果进行再过滤,在功能上有点像是where子句,但是having用于组而不是单个记录。
②在having子句中可以使用函数,而where则不能。 并且having通常和GROUP BY子句一起使用。
③having是针对在having之前有提到的字段,然后进行条件限制,可以使用别名;但是where只可以用数据库的原始字段做限制。

举例:
例1:查询学生表中,人数大于3的班号人数
SELECT 班号,COUNT(人数)
FROM 学生表
GROUP BY 班号
HAVING COUNT(人数)>3
例2:查询成绩表中平均成绩大于等于80的学生的学号选课门数平均成绩
SELECT 学号,COUNT(*) 选课门数,AVG(成绩) 平均成绩
FROM 成绩表
GROUP BY 学号
HAVING 平均成绩>=80

2. 语句顺序以及执行顺序

(8)SELECT (9)DISTINCT
(1)FROM
(3) JOIN
(2)ON
(4)WHERE
(5)GROUP BY
(6)WITH{CUBE|ROLLUP}
(7)HAVING
(10)ORDER BY
(11)LIMIT

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yanbeide

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

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

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

打赏作者

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

抵扣说明:

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

余额充值