一、SQL 概述
1、什么是 SQL
SQL(Structured Query Language)
是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server 等。
2、语法要求
SQL 语句可以单行或多行书写,以分号结尾;
可以用空格和缩进来来增强语句的可读性;
关键字不区别大小写,建议使用大写;
二、SQL 分类
DDL(Data Definition Language)
:数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language)
:数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language)
:数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language)
:数据查询语言,用来查询记录(数据)
三、DDL(Data Definition Language):数据定义语言
基本操作
查看所有数据库:show databases;
切换数据库:use mydb1;
,切换到 mydb1 数据库;
1.操作数据库
创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1;
删除数据库:DROP DATABASE [IF EXISTS] mydb1;
修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8;
2.数据类型
MySQL 与 Java、C 一样,也有数据类型MySQL 中数据类型主要应用在列上。常用类型:
- int:整型
- double:浮点型,例如 double(5,2)表示最多 5 位,其中必须有 2 位小数,即最大值为 999.99;
- decimal:泛型型,在表单线方面使用该类型,因为不会出现精度缺失问题;
- char:固定长度字符串类型;(当输入的字符不够长度时会补空格)
- varchar:固定长度字符串类型;
- text:字符串类型;
- blob:字节类型;
- date:日期类型,格式为:yyyy-MM-dd;
- time:时间类型,格式为:hh:mm:ss
- timestamp:时间戳类型;
3.操作表
创建表:CREATE TABLE 表名;
查看表结构:DESC 表名;
删除表:DROP TABLE 表名;
修改表:ALTER TABLE 表名;
四、DML(Data Manipulation Language):数据操作语言
1.插入数据
INSERT INTO 表名(列名 1,列名 2, …) ;
INSERT INTO 表名 VALUES(值 1,值 2,…);
注意:所有字符串数据必须使用单引用!
2.修改数据
UPDATE 表名 SET 列名 1=值 1, … 列名 n=值 n [WHERE 条件];
3.删除数据
DELETE FROM 表名 [WHERE 条件];
TRUNCATE TABLE 表名;
五、DCL(Data Control Language):数据控制语言
1.创建用户
CREATE USER ‘用户名’@地址 IDENTIFIED BY '密码';
2.给用户授权
GRANT 权限 1, … , 权限 n ON 数据库.* TO ‘用户名’@地址;
3.撤销授权
REVOKE 权限 1, … , 权限 n ON 数据库.* FROM ‘用户名’@地址;
4.查看用户权限
SHOW GRANTS FOR ‘用户名’@地址;
5.删除用户
DROP USER ‘用户名’@地址;
6.修改用户密码(以root身份)
use mysql;
alter user '用户名'@localhost identified by '新密码';
六、DQL(Data Query Language):数据查询语言
数据库执行 DQL 语句不会对数据进行改变,而是让数据库发送结果集给客户端。
语法:
select
列名 ----> 要查询的列名称from
表名 ----> 要查询的表名称where
条件 ----> 行条件group by
分组列 ----> 对结果分组having
分组条件 ----> 分组后的行条件order by
排序列 ----> 对结果分组limit
起始行, 行数 ----> 结果限定
1.基础查询
查询所有列
SELECT * FROM 表名;
(* :通配符,表示所有列)
2.条件查询
条件查询介绍
条件查询就是在查询时给出 WHERE 子句,在 WHERE 子句中可以使用如下运算符及关键字:
- =、!=、<>、<、<=、>、>=;
- BETWEEN…AND;
- IN(set);
- IS NULL;
- AND;
- OR;
- NOT;
3.模糊查询
参考正则表达式
SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中关于条件,SQL 提供了两种匹配模式:
%
:表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。_
: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字 符长度语句。
4.字段控制查询
- 去掉重复记录
- 查看雇员的月薪与佣金之和
- 给列名添加别名
5.排序
查询所有学生记录,按年龄升序排序
SELECT * FROM stu
ORDER BY sage ASC;
或者
SELECT * FROM stu ORDER BY sage;
查询所有学生记录,按年龄降序排序
SELECT * FROM stu
ORDER BY age DESC;
查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
SELECT * FROM emp
ORDER BY sal DESC ,empno ASC;
6.聚合函数
聚合函数是用来做纵向运算的函数:
COUNT()
:统计指定列不为 NULL 的记录行数;MAX()
:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;MIN()
:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;SUM()
:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0;AVG()
:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0;
COUNT:当需要纵向统计时可以使用 COUNT()。
7.分组查询
分组查询
当需要分组查询时需要使用 GROUP BY
子句,例如查询每个部门的工资和,这说明要使用部分来分组。
HAVING
子句
查询工资总和大于 9000 的部门编号以及工资和:
8.LIMIT:用来限定查询结果的起始行,以及总行数。
查询 5 行记录,起始行从 0 开始
SELECT * FROM emp LIMIT 0, 5;
注意,起始行从 0 开始,即第一行开始!
9.多表连接查询:
表连接分为内连接
和外连接
。他们之间最主要的区别:
内连接仅选出两张表中互相匹配的记录,外连接会选出其他不匹配的记录。
select staff.name,deptname from staff,deptno where
staff.name=deptno.name;
外连接分为左连接
和右连接
左连接:包含左边表中所有的记录,右边表中没有匹配的记录显示为 NULL。
select staff.name,deptname from staff left join deptno onstaff.name=deptno.name;
右连接:包含右边表中所有的记录,左边表中没有匹配的记录显示为 NULL。
select deptname,deptno.name from staff right join deptno ondeptno.name=staff.name;
参考链接:https://blog.youkuaiyun.com/PILIpilipala/article/details/113798383