数据库分为关系型数据库和非关系型数据库,我们要学的MySQL数据库是关系型数据库。
结构化查询语言是关系型数据库标准语言,其特点是:简单,灵活,功能强大。
SQL包含6个部分:
- 数据查询语言(DQL): 其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER
BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。- 数据操作语言(DML): 其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
- 事务处理语言(TPL): 它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
- 数据控制语言(DCL): 它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
- 数据定义语言(DDL): 其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
- 指针控制语言(CCL): 它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
我们使用过程中主要使用数据查询语言(DQL)数据定义语言(DDL)和数据操作语言(DML)
对象:数据库和表
关键字:create
、alter
、drop
、truncate
(删除当前表再新建一个一模一样的表结构)
创建数据库:create database 库名;
删除数据库:drop database 库名;
切换数据库:use 库名;
创建表:create table 表名(
字段名 类型(大小) 关系描述);
查看数据库里存在的表:show tables;
修改表:alter table 表名 约束;
删除表:drop table 表名 ;
查看生成表的sql语句:show create table 表名 ;
查看表结构:desc 表名;
例:
#注意在MySQL数据库里写可以不带";",但是在DOS命令下写必须带。
create database school; #建库
drop database school; #删库
use school; #用库
create table student( #建表
id int(4) primary key auto_increment,
name varchar(20),
socre int(3),
);
show tables;
alter table student rename studentplus; #修改表名 rename
alter table student add password varchar(20); #添加字段 add
alter table student change password pwd varchar(20);
alter table student modify pwd int;
alter table student drop pwd;
drop table student;
show create table student;
desc student;
对象:纪录(行)
关键词:insert
、update
、delete
插入:insert into 表名 values(全属性); (插入所有的字段)
insert into 表名(属性1,属性2) values (属性1,属性2); (插入指定的字段)
更新:update 表名 set 属性1 = ‘值’,属性2= ‘值’ where 主键(通常) = 值;
删除:delete from 表名 where 主键(通常) = 值;
注意:
truncate和delete的区别:truncate是删除表,再重新创建这个表。属于DDL,delete是一条一条删除表中的数据,属于DML。
insert into student values(01,'Tonny',90);
insert into student(name,score) values ('Keby',98),('somenne',78);
update student set name = 'Tonn',score = '99' where id = 01;
delete from student where id = 01;
select ... from student where 条件 group by 分组字段 having 条件 order by 排序字段 #最复杂不过如此
执行顺序:from --> where --> group by --> having --> order by
简单条件运算符:> < = != <> >= <=
逻辑运算符:&& || ! and or not (用于连接条件表达式)
模糊查询:like、between and、in、not in、is null
将一列数据作为一个整体,进行纵向的计算。
注意:聚合函数的计算,排除null值。
注意:
例如:
#所有字段查询
select * from student;
#带条件查询
SELECT * FROM `student` WHERE id > 1;
SELECT * FROM `student` WHERE name like '%on%'; #模糊查询
select count(id) from student;
# 综合
SELECT *,AVG(score) FROM `student` WHERE id > 1 GROUP BY id HAVING AVG(score)>20 ORDER BY id DESC;
嵌套查询也叫子查询,是把内层的查询结果作为外层的查询条件,并且可以多层嵌套。
语法格式:
select 字段名列表 from 表名 where 字段名 运算符(select 字段名 from 表名 where 条件) # select * ...就是查询全部
**注意:**外层的where的条件必须和内层的select查询的字段名一样,个数也一样。
语法格式:
select 字段名列表 from 表一,表二 where 条件;
但是这种查询,很容易出现笛卡尔积,为了避免,我们可以将条件尽量细致化。
笛卡尔积
1.什么是笛卡尔积:两个集合的乘积,产生一个 新的集合。表示两个集合所有的可能的组合情况
2.笛卡尔积和关系:笛卡尔积中,去掉没有意义 或不存在的组合,就是关系(规范的二维表)
语法格式:
select 字段名列表 from 表1 连接方式 join 表2 on 表1.字段=表2.字段;
左连接:left join
( 以左表为基准,匹配右表的所有内容,不够的显示NULL )
右连接:right join
(以右表为基准,去匹配左表的内容,不够的显示NULL )
联合查询是可合并多个相似的选择查询的结果集。等同于将一个表追加到另一个表,从而实现将两个表的查询组合在一起,使用为此为UNINO或UNION ALL
联合查询:将多个查询的结果合并到一起(纵向合并):字段数不变,多个查询的记录数合并.
select 语句1
union[union 选项]
select 语句2
union|[union 选项]
select 语句n
//all:表示无论重复都输出
//distinct: 去重(整个重复)(默认的)
select *from addr
union all
select *from addr;