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;`