一、SQL分类
DDL (数据定义语言)
数据定义语言 - Data Definition Language
用来定义数据库的对象,如数据表、视图、索引等
DML (数据操纵语言)
数据处理语言 - Data Manipulation Language
在数据库表中更新,增加和删除记录
如 update, insert, delete
DCL (数据控制语言)
数据控制语言 – Data Control Language
指用于设置用户权限和控制事务语句
如grant,revoke,if…else,while,begin transaction
DQL (数据查询语言)
数据查询语言 – Data Query Language select
二、MySQL常用数据类型
字符串型
VARCHAR、CHAR
大数据类型
BLOB(存储二进制数据,如图片)、TEXT(存储文本数据,如介绍)
数值型
TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
逻辑性
BIT
日期型
DATE、TIME、DATETIME、TIMESTAMP
三、MySql的基本操作
Sql语句的命令是不分大小写的。
3.1.创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name
[create_specification [, create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
CHARACTER SET:指定数据库采用的字符集
COLLATE:指定数据库字符集的比较方式
练习:
创建一个名称为mydb1的数据库。

创建一个使用utf8字符集的mydb2数据库。

创建一个使用utf8字符集,并带校对规则的mydb3数据库。

3.2.查看、删除数据库
(1)显示系统所有的数据库语句:
SHOW DATABASES
(2)显示数据库创建语句:
SHOW CREATE DATABASE db_name
(3)数据库删除语句:
DROP DATABASE [IF EXISTS] db_name
练习:
查看当前数据库服务器中的所有数据库

查看前面创建的mydb2数据库的定义信息

删除前面创建的mydb1数据库

3.3.修改数据库
ALTER DATABASE [IF NOT EXISTS] db_name
[alter_specification [, alter_specification] ...]
alter_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
练习:
切换数据库 use db_name;

查看当前使用的数据库 select database();

查看服务器中的数据库,并把其中某一个库的字符集修改为gbk;

3.4.查看、创建表(基本语句)
注意:创建表前,要先使用use db语句使用库。
CREATE TABLE table_name
(
field1 datatype,
field2 datatype,
field3 datatype
)character set 字符集 collate 校对规则
field:指定列名 datatype:指定列类型
注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。例:user对象
id int
name string
password string
birthday date
练习:
查看当前数据库的所有表:

删除user表:

创建一个员工表employee ---- 查看表结构: desc 表名;


查看employee表的结构:

3.5.定义单表字段的约束(保证数据的有效性和完整性)
定义主键约束
primary key:不允许为空,不允许重复
删除主键:alter table tablename drop primary key ;
主键自动增长 :auto_increment
定义唯一约束
unique
例如:name varchar(20) unique
定义非空约束
not null
例如:salary double not null
3.6.修改表
使用 ALTER TABLE 语句追加, 修改, 或删除列的语法.

练习:
修改表的名称:rename table 表名 to 新表名;

修改列的名称: change [column] old_col_name column_definition;

修改表的字符集:alter table user character set utf8;

在上面员工表的基本上增加一个image列。

修改job列,使其长度为60。

删除gender列。

修改表的字符集为utf8

3.7.数据库CRUD语句
Insert语句 (增加数据)
Update语句 (更新数据)
Delete语句 (删除数据)
Select语句 (查找数据)
3.7.1.INSERT 插入语句
使用 INSERT 语句向表中插入数据。

插入的数据应与字段的数据类型相同。
数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
在values中列出的数据位置必须与被加入的列的排列位置相对应。
字符和日期型数据应包含在单引号中。
插入空值:不指定或insert into table value(null)
练习:使用insert语句向表中插入数据

3.7.2.UPDATE更新语句
使用 update语句修改表中数据。

UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
练习:
将所有员工薪水修改为5000元。


将姓名为’zs’的员工薪水修改为3000元。


将姓名为’ls’的员工薪水修改为4000元,job改为ccc。


将wu的薪水在原有基础上增加1000元。


3.7.3.DELETE 删除语句
使用 delete语句删除表中数据。

如果不使用where子句,将删除表中所有数据。
Delete语句不能删除某一列的值(可使用update)
使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题(外键约束)
删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,truncate删除表的数据,原理是先将该表摧毁(不会影响主键),然后再重建该表。也就是说truncate摧毁表的时候,会将主键的初始值变为1.而delete删除,并不会重置主键的初始值。
练习:
删除表中名称为’zs’的记录。

删除表中所有记录。

使用truncate删除表中记录。

3.7.4.SELECT 查询语句
(1)语句一:

select 指定查询哪些列的数据。
column指定列名。
*号代表查询所有列。
from指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
练习:
查询表中所有学生的信息。

查询表中所有学生的姓名和对应的英语成绩。

过滤表中重复数据。

(2)语句二:
在select语句中可使用表达式对查询的列进行运算

在select语句中可使用as语句

练习
在所有学生分数上加10分特长分。

统计每个学生的总分。

使用别名表示学生分数。

(2)语句三:
使用where子句,进行过滤查询。
练习:
查询姓名为XXX的学生成绩

查询英语成绩大于90分的同学

查询总分大于200分的所有同学

(4)语句四:
在where子句中经常使用的运算符

注意:当and和or运算符同时存在时,优先执行and。
练习:
查询英语分数在 80-90之间的同学。

查询数学分数为89,90,91的同学。

查询所有姓李的学生成绩。

查询数学分>80,语文分>80的同学。

(5)语句五:
使用order by 子句排序查询结果。

Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序、Desc 降序,默认是不写时为 asc升序
ORDER BY 子句应位于SELECT语句的结尾。
练习:
对数学成绩排序后输出。

对总分排序按从高到低的顺序输出

对姓李的学生总成绩排序输出

(6)语句六:
使用group by 子句对列进行分组

Having和Where均可实现过滤,但在having可以使用聚集函数,having通常跟在group by后,它作用于分组
练习:对订单表中商品归类后,显示每一类商品的总价
归类前:

归类后:

使用having 子句 对分组结果进行过滤
练习:查询购买了几类商品,并且每类总价大于100的商品

3.8.聚合函数
3.8.1.聚合函数COUNT
Count(列名)返回某一列,行的总数

练习:
统计一个班级共有多少学生?

统计数学成绩大于90的学生有多少个?

统计总分大于250的人数有多少?

3.8.2.聚集函数SUM
Sum函数返回满足where条件的行的和

练习:
统计一个班级数学总成绩?

统计一个班级语文、英语、数学各科的总成绩

统计一个班级语文、英语、数学的成绩总和

统计一个班级语文成绩平均分

注意:sum仅对数值起作用,否则会报错。
注意:对多列求和,“,”号不能少。
3.8.3.聚集函数AVG
AVG函数返回满足where条件的一列的平均值

练习:
求一个班级数学平均分?

求一个班级总分平均分

3.8.4.聚集函数-MAX/MIN
Max/min函数返回满足where条件的一列的最大/最小值

练习:
求班级最高分和最低分(数值范围在统计中特别有用)


四、多表设计—外键约束
定义外键约束
foreign key
foreign key(ordersid) references orders(id)
多表设计中三种实体关系:

4.1.多表设计中会遇到的问题
第一类: 一对多的关系
一对多的时候, 会在 多的一方添加 一方的主键做为 外键约束.
例如: 作者 与 博客之间的关系是 一对多的关系
第二类: 多对多的关系
多对多是时候, 需要引入 第三张关系表, 将两个表中的主键拿过来当作外键.
例如: 员工与 项目是 典型的多对多的关系
第三类: 一对一的关系
一对一,实际上完全可以 将任何一方 添加 一方中去 .
4.2.多表设计案例
teacher表对student表的一对多的关系,需要在多的一方(student)添加另一方(teacher)的主键作为外键约束。
CREATE TABLE teacher (
id int(11) NOT NULL primary key auto_increment,
name varchar(20) not null unique
);
CREATE TABLE student (
id int(11) NOT NULL primary key auto_increment,
name varchar(20) NOT NULL unique,
score double default '0', //默认值
teacher_id int(11) NOT NULL,
FOREIGN KEY (teacher_id) REFERENCES teacher (id)
) ;
通过alter命令来添加外键约束

4.3.多表查询
(1)同时显示出dept和emp表的有效数据

(2)查询工资大于9000的员工来自于哪个部门?

本文详细介绍了SQL的基础知识,包括SQL的分类、MySQL常用数据类型、基本操作命令等,并通过实例演示了如何创建数据库、表,以及如何执行CRUD操作。
663

被折叠的 条评论
为什么被折叠?



