项目需要更换Oracle数据库,故对自己之前学到的MySQL进行总结,以便后续复习改善。
一、SQL分类
- 数据定义语言:简称DDL,用来定义数据库对象:数据库,表,列等。关键字:creat、alter、drop等
- 数据操作语言:简称DML,用来对数据库中表的记录进行更新。关键字:insert、delete、update等
- 数据控制语言:简称DCL,用来定义数据库的访问权限和安全级别,及创建用户
- 数据查询语言:简称DQL,用来查询数据库中表的记录。关键字:select、from、where等
二、SQL
1、DDL 数据库操作
- 创建数据库
create database 数据库名; create database if not exists 数据库名;--如果不存在则创建
- 查看数据库
查看mMySQL服务器中的所有数据库:
show databases;
- 查看某个数据库中的定义信息
show create database 数据库名;
- 删除数据库
drop database 数据库名称;
- 切换数据库
use 数据库名
- 查看表,查看表结构,查看建表语句,删除表,删除列,修改表名,修改表的字符集,修改列表,添加列
--查看表 show tables; --查看表结构 desc 表名; --查看建表语句 show create table 表名; --删除表 drop table 表名; --删除列 alter TABLE 表名 DROP列名; --修改表名 RENAME TABLE 表名 TO 新表名; --修改表的字符集 alter TABLE 表名 CHARACTER SET字符集 --修改列名 alter TABLE 表名CHANGE 列名 新列名 列类型; --添加列 alter table 表名 add 列名 列类型;
2、DML操作
首先先知道查询表中所有数据的语句:
SELECT * FROM 表名
DML是对表中的数据进行增、删、改、的操作。
- INSERT:插入
- UPDATE:更新
- DELETE:删除
2.1 插入操作:INSERT
语法:
INSERT INTO 表名(列名1,列名2...) VALUES(列值1, 列值2...);
注意:
- 列名与列值的类型、个数、顺序要一一对应
- 可以把列名当作java中的形参,把列值当作实参
- 值不要超过列定义的长度
- 如果插入空值,请使用null
- 插入的日期和字符一样,都使用引号括起来
Example:
INSERT INTO emp (id,name,gender,birthday) VALUES(1,'zhangsan','male','1999-9-9');
2.2 修改操作:UPDATE
语法:
UPDATE 表名 SET 列名1 = 列值1 ,列名2 = 列值2...WHERE 列名 = 值
Example:
将姓名为zhangsan的员工薪水修改为4000,性别修改为female
UPDATE emp SET salary = 4000,gender = 'female' WHERE name = 'zhangsan'
2.3 删除操作:DELETE
DELETE FROM 表名 [WHERE 列名=值]
Example:
删除表中姓名为zhangsan的记录
DELETE FROM emp WHERE name = 'zhangsan'
删除表中所有记录
DELETE FROM emp;
3、DQL操作
DQL数据查询语句
语法:
SELECT 列名 FROM 表名 [WHERE -> GROUP BY -> HAVING ->ORDER BY]
3.1 查询所有列
SELECT * FROM stu
3.2 查询指定列
SELECT sid ,sname ,age FROM stu;
3.3 条件查询
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>、<、<=、>、>=; BETWEEN...AND; IN(set); IS NULL; IS NOT NULL; AND; OR; NOT;
3.4 模糊查询
在使用like关键字时,通常和通配符配合使用
通配符:用来匹配一部分的特殊字符;_:匹配任意一个字符;%:任意0~n个字符。
3.5 去除重复记录
SELECT DISTINCT sal FROM emp;
3.6 排序
排序使用 order by 列名 asc/desc 作为语法。默认时asc(升序)可以指定 desc 降序。
4、聚合函数
- COUNT():统计指定列不为null的记录行数
- MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
- MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
- SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0
- AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0
5、分组查询
当需要分组查询时需要使用GROUP BY子句,例如每个部分的工资和,这就要使用部门来分组
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;
6、HAVING子句
Example:查询工资总和大于9000的部门编号以及工资总和:
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
having和where的区别
1、having是在分组后对数据进行过滤,而where是在分组前对数据进行过滤
2、having后面可以使用聚合函数,where后面不可以使用聚合函数
7、LIMIT
LIMIT用来限定查询结果的起始行,以及总行数
Example:查询5行记录,起始行从0开始
SELECT * FROM emp LIMIT 0,5;