关系型数据库(RDBMS):
所谓的关系型数据库(Relational Database Management System),是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
非过程性语言:一条语句就只有一个执行结果
DDL(数据定义语言): create,alter,drop…
DML(数据操纵语言): update,insert,delete…
DCL(数据控制语言): grant,if…
DQL(数据查询语言): select…
单表约束的约束类型:
- 主键约束:primary key
- 唯一约束:unique
- 非空约束:not null
基本语法
查看数据库中有哪些表:show tables;
查看表结构:desc 表名;
删除表结构:drop talbe 表名;
开启一个事务:start transaction;
回滚事务:rollback;
[alter]
修改表添加列:alter table 表名 add 列名 类型(长度) 约束;
修改表删除列:alter table 表名 drop 列名;
修改表的列的类型长度及约束:alter table 表名 modify 列名 类型(长度) 约束;
修改表的列名:alter table 表名 change 旧列名 新列名 类型(长度) 约束;
修改表名:rename table 旧表名 to 新表名;
修改表的字符集:alter table 表名 character set 字符集;
[insert]
向数据库插入记录:insert into 表名 (列名,列名,…) values (值1,值2,…); --插入指定列的值
向数据库插入记录:insert into 表名 values (值1,值2,…); --插入所有列的值
[update]
修改记录:update 表 set 列名=值,列名=值 [ where 条件 ];
删除记录:delete from 表名 [ where 条件 ];
删除记录:turncate table 表名;
删除记录:delete table 表名;
区别:turncate 是DDL语言,是将整个表删除然后重新创建一个表。delete 是DML语言,会一条条删除记录。事务管理只能作用在DML语句上,如果在一个事务中使用delete删除所有记录,可以找回。
[select]
查询记录:select [ distinct ] *|列名 from 表 [ where 条件 ];
[where]
where语句后面可以加:
- 条件关键字:=,>,>=,<,<=,<>
- like关键字:可以使用占位符‘_’(匹配一个字符)和‘%’(匹配多个字符)。例:like ‘张_’
- in 后跟一组值。例如 in(1,2,3)
- and or not
[order by]
排序查询order by:对数据进行排序,默认升序(asc升序,desc降序),例如:
select * from exam where name like '李_' order by english desc, chinese desc;
聚合函数(通常与group by一起使用)
- sum();
- count();
- max();
- min();
- avg();cc
select sum(english+ifnull(math,0)) from exam; --ifnull(math,0)为空的时候用0代替计算
[group by]
select product,sum(price) from table
group by product
having sum(price) > 1500
order by sum(price) desc;
SQL的查询语句的顺序:select…from…where…group by…having…order by…
多表查询
多表查询方式有三:
交叉连接
select * from A,B; --获得的是两个表的笛卡尔积
内连接:inner join
- 显式内连接
SELECT * FROM customer c INNER JOIN orders o ON c.cid = o.cid;
- 隐式内连接
SELECT * FROM customer c, orders o WHERE c.cid = o.cid;
外连接:outer join
- 左外连接
SELECT * FROM customer c LIFT OUTER JOIN orders o ON c.cid = o.cid;
- 右外连接
SELECT * FROM customer c RIGHT OUTER JOIN orders o ON c.cid = o.cid;
多表查询的子查询
一个SQL语句查询的过程中需要依赖另一个查询语句
SELECT * FROM customer c, orders o WHERE c.cid = o.cid AND c.cid IN (SELECT cid FROM orders WHERE addr LIKE '海淀%');