关系型数据库: 二维表,都是表结构易于查询,数据存在磁盘中安全,使用通用的SQL语言方便
注释 -- 这里有一个空格 或者#
DDL:操作数据库,表
数据库操作:show databases查询 create database创建数据库 drop database删除数据库 use使用数据库 后面都加上数据库名字
表操作:show tables查询表名称 desc表名称 查询表结构 create table 表名(字段名 数据类型) drop database表名
修改表:前面都是alter table 表名 修改表名+rename to 新表名 添加一列+add 列名 数据类型 修改数据类型 +modify 列名 新数据类型
修改列名和数据类型 +change 新列名 新数据类型 删除列+drop 列名
DML:对表中的数据进行增删改的操作
给指定的列添加数据 INSERT INTO student (id,name) VALUES(1,'张三');,全表 添加就 都写上,表名后面的括号也可以省略 (不建议)添加多行可以在value后面直接写
修改表中的数据 update student SET `name`='李四' WHERE id=1; 如果不加 where条件就会把记录 全部都改了,一般必须写
删除表中的数据 :DELETE FROM student WHERE NAME="李四"; 如果不加 where条件就会把记录 全部都删除 ,一般必须写
DQL:对数据进行查询
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后条件 order by 排序字段 limit 分页限定
基础查询:SELECT NAME,AGE FROM stu; 去除重复记录:SELECT DISTINCT address from stu;
设置列名别名:SELECT NAME,math AS 数学成绩,english AS 英语成绩 FROM stu; as也可以省略
条件查询:SELECT * FROM stu WHERE age>20; SELECT * FROM stu WHERE age BETWEEN 20 and 30; SELECT * FROM stu WHERE age>20 AND math>80;
或者用or 连接(还有in)SELECT * FROM stu WHERE age=18 or age=20; SELECT * FROM stu WHERE age in (18,20,30);
如果是空值就使用 is null 或者 is not null
like模糊查询:通配符 _代表单个任意字符;%代表任意个数字符
排序查询: order by ASC升序 DESC降序如果有多个排序条件,前面的一样时,才会按照后面的排序
聚合函数(null不参与计算) count(统计数量列名不能为空) max(最大值) min(最小值) sum(求和) avg(平均值) 后面跟列名
例如:select min(math) from student
分组查询:group by(分组之后,查询的字段为聚合函数和分组字段,其他字段无意义)
分页查询:limit 起始索引 查询条目数 select from student limit 0 ,3; 计算方式(当前页码-1)*每页显示的条数 oracle用rownumber SQLserver用top
where和having的区别:
where是分组之前进行限定,having是分组之后过滤的,
where不能对聚合函数进行判断having可以
执行顺序,where>聚合函数>having
DCL:对数据库进行权限控制
约束:非空 NOT NULL 唯一UNIQUE 主键PRIMARY KEY(非空且唯一) 检查CHECK(MYSQL不支持) 默认DEFAULT 外键FOREIGE KEY
auto_increment自增长1
外键约束:添加外键
CONSTRAINT 外键名称(随便)_主表名_从表名 FOREIGN KEY(从表的外键属性) REFERENCES dept(主表的关联属性)
有表之后添加外键 :alter table 从表 add CONSTRAINT 外键名称(随便)_主表名_从表名 FOREIGN KEY(从表的外键属性) REFERENCES dept(主表的关联属性)
数据库设计:
多表查询:
连接查询:
内连接:两个表中的交集
隐式内连接:SELECT * FROM emp,dept WHERE emp.dep_id = dept.did; 给表起别名:SELECT t1. NAME,t1.gender,t2.dname FROM emp t1,dept t2 WHERE t1.dep_id = t2.did;
显示内连接: inner可以不写 select * from emp inner join dept on emp.dep_id = dept.did; select * from emp join dept on emp.dep_id = dept.did;
外连接:
左外连接:A表中的数据和交集的数据 select * from emp left join dept on emp.dep_id = dept.did;
右外连接: B表中的数据和交集的数据 select * from emp right join dept on emp.dep_id = dept.did;
子查询:嵌套查询
单行单列:select * from emp where salary > (select salary from emp where name = '猪八戒');
多行单列:select * from emp where dep_id in (select did from dept where dname = '财务部' or dname = '市场部');
多行多列:select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where t1.dep_id = dept.did;
事务:
开启事务:begin 或者 start transaction
提交事务:commit 默认是自动提交 1是自动提交 0是手动提交 set@@autocommit = 0 变成手动提交
回滚事务:rollback
四大特征:
A:原子性 事务是不可分割的最小操作单位,要么都成功, 要么都失败
C:一致性,事务完成时所有数据保持一致状态
I:隔离性,多个事务之间操作的可见性
D持久性,事务一旦提交或者回滚,他对数据库中的数据改变是持久的
标签:SELECT,查询,dept,emp,MySql,where,select From: https://www.cnblogs.com/songyuejava/p/16727260.html