MySQL常用语法

数据库三范式和SQL分类

三范式

三范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。

  • 第一范式:是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值(一个列中只能存储一个值)
  • 第二范式:要求数据库表中的每个实例或行必须可以被惟一地区分(就是有主键)。
  • 第三范式:要求一个数据库表中不包含已在其它表中已包含的非主键段信息。

SQL分类

数据查询语言(DQL:Data Query Language 常见)

​ 其语句包括动词 SELECT

数据操作语言(DML:Data Manipulation Language 常见)

​ 其语句包括动词 INSERT,UPDATE 和 DELETE。

数据定义语言(DDL)

数据操作语言(DML)

事务处理语言(TCL)

数据库控制语言(DCL)

指针控制语言(CCL)

单表查询

单表查询语法

SELECT [DISTINCT] * | 字段 [别名] [,字段 [别名]]

FROM 表名称 [别名]

[WHERE 条件(S)]

[ORDER BY 字段 [ASC|DESC] [,字段 [ASC|DESC],…]];

消除重复

DISTINCT 关键字可以用于一列,也可以用于多列。

-- 5 查询有员工的部门和职位
SELECT DISTINCT DEPTNO,JOB FROM emp;

算术运算符

对 NUMBER 型数据可以使用算数操作符创建表达式(+ - * /);

对 DATE 型数据可以使用算数操作符创建表达式(+ -)。

过滤查询

使用 WHERE 做过滤查询注意:

  1. 字符串和日期要用单引号扩起来

  2. 数字类型直接书写

  3. 字符串是大小写不敏感的,日期值是格式大小写敏感的

  4. 字符串若要大小写敏感,需要添加 binary 关键字。

    SELECT * FROM dept WHERE BINARY DNAME = 'sales'
    

比较运算符

=,!=,<>,>,>=,<,<=

BETWEEN … AND …:在两值之间,包含开头和结尾,是闭区间

IN:匹配列出的值,如:IN(1, 2, 3, 4)

LIKE :模糊查询,匹配字符串模式,必须使用通配符才有意义

​ 匹配单个字符:_ 表示

​ 匹配任意多个字符:% 表示

IS NULL:是否为空

空值判断

用NULL表示空,注意:

  1. 空值是指不可用、未分配的值,也就是没有值
  2. 空值不等于零或空格,也不表示空字符串
  3. 任意类型都可以支持空值
  4. 包括空值的任何算术表达式都等于空
  5. 使用函数 IFNULL(expr1, expr2),若 expr1 不是 NULL,IFNULL() 返回expr1,否则它返回expr2

逻辑运算符

AND:如果组合的条件都是 true,返回 true;

OR:如果组合的条件 之一是 true ,返回 true;

NOT:如果下面的条件是 false,返回 true。

优先级规则:比较运算符 > NOT > AND > OR。

结果排序

ORDER BY 子句出现在 SELECT 语句后执行;

ORDER BY 可以使用别名,但不能使用加了引号的别名或列明来排序,没有效果:

ASC:升序,缺省

DESC:降序

-- 28 查询所有员工信息,按照工资排序
SELECT * FROM emp ORDER BY SAL;

多表查询

因为需要查询的数据分散在多张表中,只有联合多张表才能查询出想要的数据。在mysql中多表查询会产生笛卡尔积,造成一些无意义的数据,要通过条件消除这些无意义的数据。

内连接查询

隐式:
SELECT 列名1,列名2,…
FROM 表名1,表名2,…
WHERE 消除笛卡尔积条件 AND …
显示:
SELECT 列名1,列名2,…
FROM 表名1 JOIN 表名2 ON 消除笛卡尔积条件
JOIN …

外连接查询

外连接查询,分为左外链接查询和右外链接查询。

左外连接查询,可以保证左边表里面的数据都查询出来,同理右外连接查询保证右面表的数据都可以被查出来。

SELECT 列名1,列名2,…
FROM 表名1 LEFT JOIN 表名2 ON 消除笛卡尔积条件
LEFT JOIN …

分组函数

函数分为

单行函数:将每条数据进行独立的计算,然后每条数据得到一条结果;

多行函数:多条数据同时计算,最终得到一条结果数据。也成为聚集函数、分组函数,主要用于完成一些统计功等等。

多行函数

COUNT():查询表中的数据记录;

AVG():求出平均值;

SUM():求和;

MAX():求出最大值;

MIN():求出最小值。

**注意:**统计函数忽略空值,可以使用 IFNULL, 因为是NULL不会影响汇总值,但会影响汇总数量;不能在where语句中使用分组函数。

分组查询

解决项目统计需求的问题, 做什么报表功能(柱状图,饼状图)。在MySQL使用GROUP BY来实现分组

SELECT 列名1, 列名2,…,统计函数(列名),…
FROM 表名
GROUP BY 分组列名1, 分组列名2,…
HAVING 分组之后的过滤条件

注意:
select 子句中出现列名要代表整体性,才合理
having 子句是对分组之后进行过滤, WHERE 是在 group by 之前的

单行函数

获取日期时间中某个段

DAY(date):获取日期中的天数,范围是从 1 到 31;

HOUR(time):返回 time 对应的小时数,范围是从 0 到 23;

MINUTE(time):返回 time 对应的分钟数,范围是从 0 到 59;

MONTH(date):返回 date 对应的月份,范围时从 1 到 12;

YEAR(date):返回 date 对应的年份,范围是从 1000 到 9999;

LAST_DAY(date):获取一个日期或日期时间值,返回该月最后一天对应的值。

日期转换为字符串

DATE_FORMAT(date, format):把日期转换为字符串。

format 中常见说明符如下(更多参见 MySQL 5.5 中文参考手册 549 页)

子查询

子查询指的就是在一个查询之中嵌套了其他的若干查询。

在使用select语句查询数据时,有时候会遇到这样的情况,在 where 查询条件中的限制条件不是一个确定的值,而是一个来自于另一个查询的结果(比如查询大于平均工资的员工)。

用得最多是子查询结果是单列单行(= > < >= <= <>),多行单列(IN)
注意子查询要用圆括号括起来, 子查询是在主查询之前执行

SELECT <select_list>
FROM table
WHERE expr operator (SELECt select_list FROM table)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小云很优秀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值