1.1上次课内容回顾: mysql
[AppleScript]纯文本查看__复制代码sql
?数据库
01服务器
02框架
03函数
04工具
05插件
06设计
07code
08
09
10
11
12
13
14
15
16
17
BootStrap:
*
响应式的HTML
`,CSS
,`JS的框架.
*
响应式设计:
*
设计一套页面
`,适配不一样的设备
,在手机
,PAD
,`PC端都可以正常浏览.
*
响应式原理:
*
使用CSS
`3的媒体查询
,`根据屏幕的分辨率匹配不用的样式.
*
BootStrap
`:`
*
全局CSS:
*
栅格:
*
表单
`:`
*
按钮...
*
组件
`:`
*
导航条:
*
分页栏
`:`
*
标签页
`:`
*
JS的插件:
*
图片轮播.
1.2MYSQL的回顾:
1.2.1MySQL的概述:
1.2.1.1什么是数据库:
数据库:就是一个文件系统,这个文件必须经过标准的SQL访问.
1.2.1.2什么是关系型数据库:
关系型的数据库存放的都是实体之间的关系.
1.2.1.3经常使用的关系型数据库:
[AppleScript]纯文本查看__复制代码
1
2
3
4
5
6
7
8
9
MySQL :免费的小型的数据库
`,`如今被Oracle收购.
Oracle :Oracle公司收费的大型的数据库.
SQLServer :微软公司收费中型的数据库.
DB
`2
:IBM公司收费的大型的数据库.`
SyBase :SyBase公司收费的数据库.已经被淘汰.PowerDesigner数据建模的工具.
SQLite :小型的嵌入式的数据库.
*
`*
`*
Java程序中常常使用的数据库
MySQL
Oracle
1.2.1.4数据库存储的结构:
1.2.2SQL的概述:
1.2.2.1什么是SQL:
SQL:结构化的查询语言.
1.2.2.2SQL分类:
DDL:数据定义语言
* create,alter,drop...
DML:数据操纵语言
* update,insert,delete
DCL:数据控制语言
* grant,if..
DQL:数据查询语言
* select
1.2.2.3SQL的特色:
非过程性语言:一条语句就会有一个运行的结果.
1.2.3使用SQL
1.2.3.1使用SQL操做数据库(对数据库的CRUD的操做)
【建立数据库】
[AppleScript]纯文本查看__复制代码
1
2
3
4
5
6
7
8
9
语法
`:`
*
create database 数据库名称 [
`character
set
字符集 collate 字符集校对];`
练习
`:`
*
建立db
`1`;
*
create database db
`1`;
*
建立一个带有字符集的数据库db
`2`;
*
create database db
`2
character
set
gbk;`
*
建立一个带有字符集和校对规则的数据库db
`3`;
*
create database db
`3
character
set
utf8` `collate utf
8`_bin;
【查看数据库】
[AppleScript]纯文本查看__复制代码
1
2
3
4
5
6
7
语法
`:`
*
查看数据库服务器中全部的数据库
`:`
*
show
databases;
*
查看某个数据库的定义信息.
*
show
create database 数据库名;
*
查看当前正在使用的数据库信息.
*
select
database
`()
;`
【删除数据库】
语法:
* 删除数据库:
* drop database 数据库名;
【修改数据库】
语法:
* 修改数据库修改的是的数据库的字符集和校对规则.
* alter database 数据库名 character set 新字符集 collate 校对规则;
【切换数据库】
语法:
* use 数据库名称;
1.2.3.2使用SQL操做数据库中的表(对数据库的表CRUD的操做)
【建立表】
[AppleScript]纯文本查看__复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
语法
`:`
*
create table 表名
(
字段名 类型
`(长度
)
约束`,
字段名 类型
`(长度
)
约束`,
字段名 类型
`(长度
)
约束`
)
`;`
数据类型
`:`
*
Java类型
`:
MySQL`:
byte
`/short
/int
/long tinyint
/smallint
/int
/`bigint
String char
`/`varchar
*
区别?char是固定长度的字符串
`,`varchar可变长度的字符串.
*
char
`(8
)
和 varchar(
8`)
*
若是插入一个字符串hello 插入到char 那么 插入hello .插入到varchar中 插入hello
float float
double double
boolean
bit
Date
date
`/time
/datetime
/`timestamp
*
datetime和timestamp都是既有日期又有时间的日期类型
*
区别? datetime须要使用外部传入的日期.若是没传这个值就是Null. timestamp会使用系统当前的时间做为这个值的默认值.
文本文件 Text
二级制文件 BLOB
*
`*
*` `Oralce使用CLOB
/`BLOB
*
`*
`*
MYSQL中除了字符串类型须要设置长度其余的类型都有默认长度.
约束:
单表约束:
*
主键约束:primary
key
(
`默认就是惟一非空的`)
*
惟一约束:unique
*
非空约束:
`not
null`
建立一个表:
`*
*
*
建立表以前先选择数据库:
use 某个数据库;`
create table employee
`(`
eid int primary
key
auto_increment
`,`
ename varchar
`(20
)
not
null`,
email
varchar
`(30
)
unique`,
birthday
date
`,`
job varchar
`(20
)`,
resume
text
)
`;`
【表的查看】
[AppleScript]纯文本查看__复制代码
1
2
3
4
查看数据库中有哪些表:
*
show
tables;
查看表结构
`:`
*
desc 表名;
【表的删除】
表的删除:
* drop table 表名;
【表的修改】
[AppleScript]纯文本查看__复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
修改表添加列:
*
alter table 表名
add
列名 类型
`(长度
)
约束;`
*
alter table employee
add
image
varchar
`(50
)`;
修改表删除列:
*
alter table 表名 drop 列名;
*
alter table employee drop job;
修改表的列的类型长度及约束
`:`
*
alter table 表名 modify 列名 类型
`(长度
)
约束;`
*
alter table employee modify
image
varchar
`(80
)
not
null;`
修改表的列名
*
alter table 表名 change 旧列名 新列名 类型
`(长度
)
约束;`
*
alter table employee change
image
eimage varchar
`(60
)`;
修改表名
*
rename table 旧表名
to
新表名;
*
rename table employee
to
user;
修改表的字符集:
*
alter table 表名
`character
set
字符集;`
*
alter table user
character
set
gbk;
1.2.3.3使用SQL操做数据库中的表的记录(对表的记录的CRUD的操做)
【插入记录】
[AppleScript]纯文本查看__复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
语法
*
insert
into
表名
(
`列名,
列名,
...)` `values` `(
值1
,值
2,
...)
;
---插入指定列的值`
*
insert
into
表名 values
(
`值1
,值
2,
...)
;
---插入全部列的值`
注意事项:
*
列名的个数与值的个数对应.
*
列的类型与值的类型对应.位置也要对应.
*
列的类型若是是字符串或者日期
`,`写值的时候使用单引号将值引发来.
*
插入的值的最大长度不能超过列的最大长度.
插入记录:
*
插入某几列的值
`:`
*
insert
into
employee
(
`eid,
ename,
email)` `values` `(
null,
'aaa',
'aaa@itcast.cn')
;`
*
插入全部列的值
`:`
*
insert
into
employee values
(
`null,
'bbb',
'bbb@itcast.cn',
'1990
-09-01
',
'HR',
'I am HR')
;`
插入中文:
insert
into
employee
(
`eid,
ename,
email)` `values` `(
null,
'张三',
'aaa@163.
cn')
;`
ERROR
1366
(
`HY000
):` `Incorrect` `string` `value
:
'xD5
xC5
xC8
xFD'
for
column
'ename'
at
row
1`
*
`*
`*
插入中文问题的解决:
*
show
variables like '%
`character`%';
*
`*
找到MYSQL的安装路径/
my`.ini文件:
*
`*
从新加载mysql的配置文件:`
*
services.msc
*
中止mysql的服务
`,`从新启动mysql服务.
*
执行以前的SQL语句.
[AppleScript]纯文本查看__复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
【修改记录】
语法:
*
update
表
set
列名
`=值
,列名
=值 [
where
条件];`
注意事项:
*
列名和值类型也要一致.
*
值不能超过列的最大长度.
*
值是字符串或日期
`,`须要使用单引号.
练习:
*
修改employee表中全部记录的job为WORKER
*
update
employee
set
job
`=`'WORKER';
*
修改employee表将
`name为aaa的邮箱改成[
email]aaa@
163.com[
/email
]`
*
update
employee
set
email
=
'aaa@
`163.`com'
where
ename
=
'aaa';
*
修改employee表将
`name为bbb的邮箱改成[
email]bbb@
163.com[
/email
]同时修改job为HR`
*
update
employee
set
email
=
'bbb@
`163.com'` `,` `job
='HR'` `where` `ename
=`'bbb';
【删除记录】
语法:
*
delete
from
表 [
`where
条件];`
注意事项:
*
删除表中的一行记录
`,`不能删除某列值
*
若是没有条件删除表中的全部列.
练习:
*
删除
`id为
8的记录
:`
*
delete
from
employee
where
eid
=
8
`;`
*
删除全部记录
`:`
*
delete
from
employee;
删除表中的全部记录truncate table 表名 和
delete
from
表 区别?
*
区别
`:`
*
truncate table 删除表的记录:将整个表删除掉
`,`从新建立一个新的表.truncate属于DDL.
*
delete
from
删除表的记录:一条一条进行删除.
delete
`属于DML。`
*
事务管理 只能做用在DML语句上.若是再一个事务中使用
`delete`删除全部记录,能够找回.
【基本查询】
查询语句:
*
select
[distinct]
*
`|列名
from
表 [`where
条件];
准备:
create table exam
`(`
id
int primary
key
auto_increment
`,`
name
varchar
`(20
)`,
english int
`,`
chinese int
`,`
math int
)
`;`
insert
into
exam values
(
`null,
'张三',
85,
74,
91)
;`
insert
into
exam values
(
`null,
'李四',
95,
90,
83)
;`
insert
into
exam values
(
`null,
'王五',
85,
84,
59)
;`
insert
into
exam values
(
`null,
'赵六',
75,
79,
76)
;`
insert
into
exam values
(
`null,
'田七',
69,
63,
98)
;`
insert
into
exam values
(
`null,
'李四',
89,
90,
83)
;`
查询全部记录
`:`
*
select
*
from
exam;
查询这个班级人的姓名和英语成绩
`:`
*
select
name
`,`english
from
exam;
查询英语成绩
`,将重复英语成绩去掉
:`
*
select
distinct english
from
exam;
查询李四的学生成绩
`:`
select
*
from
exam
where
name
`=`'李四';
查询名称叫李四而且英语成绩大于
`90`的
select
*
from
exam
where
name
`='李四'` `and` `english` `>
90`;
将成绩
`+10
分进行显示`:
select
name
,
`english+
10,
chinese+
10
,math
+`10
from
exam;
显示这我的的名称和对应总成绩的分数
`:`
select
name
`,english
+chinese
+`math
from
exam;
使用
`as起别名
,as
能够省略.`
select
name
,
english
`+chinese
+`math
as
sum
from
exam;
【条件查询】
`where`语句后面能够加:
条件的关键字:
=
,
>
,
>
`=
,
<,` `<
=
,
<`>
like中可使用占位符
`:
_ 和 % :下划线匹配一个字符,` `%
:`能够匹配任意多个字符.
*
like ‘张%’; like ‘张_’; like ‘%明’; like ‘%明%’;
in
后跟着一组值.
*
id
in
(
`1,
2,
3`)
and
or
not
【排序查询】
order
by
对数据进行排序.默认升序. (asc升序
`,`desc降序)
*
查询全部学生的信息
`,`而且按语文成绩进行排序.
*
select
*
from
exam order
by
chinese;
*
查询全部学生的信息
`,`而且按语文成绩进行降序排序.
*
select
*
from
exam order
by
chinese desc;
*
查询学生的信息
`,按照英语成绩降序排序,若是英语成绩相同
,`按照语文降序.
*
select
*
from
exam order
by
english desc
`,
chinese desc;`
*
查询姓李的学生的信息
`,`同时按照英语升序排序.
*
select
*
from
exam
where
name
like '李%' order
by
english asc;
【聚合函数】
sum
`(`)
count
`(`)
max
`(`)
min
`(`)
avg
`(`)
*
查询每一个学生总成绩
`:`
*
select
name
`,(
english+
chinese+
math`)
from
exam;
*
统计全部学生的总分
`:`
*
select
sum
`(english
+chinese
+math
)
from
exam;
-- ifnull(english,0)`
*
select
sum
`(english
)+
sum(
chinese)
+sum
(math
)
from
exam;`
*
统计学生的个数
`:`
*
select
count
`(*) from exam;`
* 统计英语成绩的最高分:
* select max(english) from exam;
* 统计语文成绩的最低分:
* select min(chinese) from exam;
* 统计英语成绩平均分:
* select avg(english) from exam;
【分组】
group by
建立一个订单详情的表:
* 统计订单中的每类商品所购买的个数:
* SELECT product,COUNT(*)
FROM orderitem GROUP BY product;
*
统计订单中的每类商品所花的金额
`:`
*
SELECT product
`,SUM
(price
)
FROM orderitem GROUP BY product;`
*
统计订单中的每类商品所花总金额大于
`2000`信息.
*
SELECT product
`,SUM
(price
)
FROM orderitem GROUP BY product HAVING SUM(
price)` `>` `2000
;`
*
统计订单中名称有电子的商品而且所花金额大于
`1500`同时按照价格降序排序:
*
SELECT product
`,SUM
(price
)
FROM orderitem WHERE product LIKE '电%' GROUP BY product HAVING SUM(
price)` `>` `1500` `ORDER BY SUM
(price
)
DESC;`
【SQL的查询语句的总结】
顺序
`:
s...f...w...g...h...o...;`
1.3
`案例一:将商城的案例中的表结构进行分析:`
1.3
`.1
需求`:
在最后的综合案例中
`,会建立数据库
,为数据库中建立不少表.表与表之间是有关系存在
,`分析表之间关系而且完成表的建立.
1.3
`.2
分析:`
1.3
`.2.1
技术分析`
【数据库的多表设计】
数据库都是关系型的数据库
`,`存的是实体之间的关系.实体之间有哪些关系?
实体的关系总结起来就有三种关系:
一对多
`:`
*
客户和订单:一个客户能够产生多个订单
`,`一个订单只能属因而某一个客户.
*
部门和员工:一个部门下能够有多个员工
`,`一个员工只能属于某一个部门.
多对多
`:`
*
学生和课程:一个学生能够选择多门课程
`,`一门课程能够被多个学生选择.
*
订单和商品:一个订单中包含多个商品
`,`一个商品也能够出现多个订单中.
一对一:
*
公司和地址:一个公司只能有一个注册地址
`,`一个地址也只能被一个公司注册.
【多表的设计】
一对多的关系的建表原则:
*
在多的一方建立一个字段
`,`这个字段做为外键执向一的一方的主键.
多对多的关系的建表原则:
*
` 建立一个第三种表,中间表中至少须要两个字段分别做为外键执向多对多双方的各自的主键.`
一对一的关系的建表原则:
*
惟一外键对应:假设一对一的双方是一对多的关系.在多的一方建立外键执向一的一方的主键.须要在外键上添加一个unique约束.
*
主键对应:将一对一的双方的主键创建映射.
【使用SQL建立一对多的关系】
建立客户表
`:`
create table customer
`(`
cid int primary
key
auto_increment
`,`
cname varchar
`(20
)`
)
`;`
create table orders
`(`
oid int primary
key
auto_increment
`,`
addr varchar
`(50
)`,
cid int
)
`;`
*
`*
`*
约束:用来保证数据的完成型.
*
多表约束:外键约束!!!
*
`*
`*
给orders表中的cid添加外键约束.
*
alter table orders
add
foreign
key
(
`cid)` `references customer
(cid
)`;
[AppleScript]纯文本查看__复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
1.4
`.2
分析:`
1.4
`.2.1
技术分析:`
【多表的查询的SQL】
多表的查询的方式:
*
交叉链接:
*
select
*
from
A
`,`B;
--- 得到的是两个表的笛卡尔积.
*
内链接
`:
inner join
-- inner 能够省略`
*
显式内链接:
`select
*
from
A inner join B
on
条件;`
*
SELECT
*
FROM customer c INNER JOIN orders o ON c.cid
=
o.cid;
*
隐式内链接:
`select
*
from
A,
B
where
条件;`
*
SELECT
*
FROM customer c
,
`orders o WHERE c.cid
=
o.cid;`
*
外链接:outer join
-- outer 能够省略
*
左外链接:left outer join
-- select * from A left outer join B on 条件;
*
SELECT
*
FROM customer c LEFT OUTER JOIN orders o ON c.cid
=
o.cid;
*
右外链接:right outer join
-- select * from A right outer join B on 条件;
*
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 '海淀%')
;`
【多表练习】
按客户名称统计订单的个数.
SELECT c.cname
`,COUNT
(*
)
FROM customer c,
orders o WHERE c.cid=o.cid GROUP BY c.cname;`