一、前端native,後端mysql,二者對接。前端
二、概念:數據庫的做用:把數據以表的形式存儲起來,方便查詢。mysql
三、學習重點:查詢語言sql
一、關係型數據庫系統數據庫
二、核心:以二維表的形式存儲數據後端
三、行:一條記錄,一個事物的信息。函數
列:一個字段,一個事物的某一種屬性。學習
四、一個表中全部行是一類事物的集合測試
五、一個數據庫由不少表組成。編碼
一、結構化查詢語言,用於關係型數據庫spa
二、不區分大小寫
三、重點:查詢
一、開源、免費、支持多平臺
一、端口號:通常爲3306
二、服務端:啓動、中止、重啓
三、客戶端:命令行客戶端、native
一、點擊native界面「鏈接」
二、主機名或IP地址、端口、用戶名、密碼。隨便寫鏈接名。
三、點擊鏈接測試。點擊肯定
四、點擊鏈接名,啓用變色。
五、建立數據庫
六、建立表、添加字段、設計表
七、增刪查改數據
一、整數:int(無符號-2147483648~2147483647,有符號0-4294967295),長度沒有做用
二、小數:decimal,如decimal(5,2)表示共存5位數,小數2位,整數3位。
三、字符串:varchar,範圍(0~65533),varchar表示最多3個字符,一箇中文或一個字符都佔據一個字符。
一、主鍵(primary key):int類型、無符號、自動遞增、惟一的標識一條記錄
1) Student_ID int(10) UNSIGNED NOT NULL PRIMARY KEY auto_increment
二、非空約束(not null):不容許爲空值
三、惟一(unique):此字段步雲山重複
四、默認值(default):不填寫此值會使用默認值
五、外鍵(foreign key):兩個表之間的關聯關係
六、索引:快速訪問數據庫表中的特定信息、索引是對數據庫中表中一列或者多列的值進行排序的一種結構,相似書籍的目錄
一、DBA人員維護
二、備份:
1) 鼠標點擊數據庫,右擊選擇轉儲SQL文件》結構和數據
2) 選擇文件保存位置,點擊保存。
三、恢復:
1) 刪除原先數據庫,新建數據庫。除名稱不一致外,字符集和排序規則需一致
2) 選擇數據庫,右鍵運行SQL文件
3) 文件:選擇文件所在位置,選擇對應文件。點擊「開始」
一、建立數據庫:
1) Create語法:CREATE DATABASE 數據庫名;
2) 若是數據庫不存在則建立,存在則不建立。--- IF NOT EXISTS
3) 建立數據庫,並設定編碼集爲utf8 --- CHARSET utf8 COLLATE utf8_general_ci
二、刪除數據庫
1) Drop語法:DROP DATABASE 數據庫名;
一、建立數據表:
4) Create語法:CREATE table 表名 (字段名 類型 約束,字段名 類型 約束,字段名 類型 約束);
5) 若是數據表不存在則建立,存在則不建立。--- IF NOT EXISTS
6) 建立數據表,並設定編碼集爲utf8 --- DEFAULT CHARSET 'UTF8'
二、刪除數據表
2) Drop語法:DROP TABLE 數據表名;
三、舉例:
create table students(
id int auto_increment primary key,
name varchar(10) not null,
sex varchar(3) default '女',
address varchar(50),
phone int not null unique,
age,
);
drop table student;
ALTER TABLE 表名 ADD 字段名 類型 約束
一、insert into語法:insert into 表名( f字段1,字段2,字段3 )VALUES( value1, value2,...valueN );
二、舉例:
insert into student (name,money,sex,phone) values ('hk',10000,'男',188);
insert into student values('','小明',100,'',120);
1、delete語法:delete from 表名 where ‘id’>10
一、Select語法:SELECT 字段1,字段2 FROM 表名
1) 查詢語句中你可使用一個或者多個表,表之間使用逗號(,)分割,並使用WHERE語句來設定查詢條件。
2) SELECT 命令能夠讀取一條或者多條記錄。
3) 你可使用星號(*)來表示表中所有數據:select * from students
一、UPDATE 表名 SET字段=值, 字段2=值2,WHERE `id`>10
一、篩選條件
二、關係
1) 能夠在 WHERE 子句中指定任何條件。
2) 運算關係:
① 等於=
② 小於<
③ 大於>
④ 大於等於>=
⑤ 小於等於<=
⑥ 不等於!=、<>
3) 邏輯關係:
① 並、和=and。
② 或=or。
③ 不、非=not。
4) WHERE 子句相似於程序語言中的 if 條件,根據 MySQL 表中的字段值來讀取指定的數據。
5) 若是給定的條件在表中沒有任何匹配的記錄,那麼查詢不會返回任何數據。
三、舉例:
SELECT field1 FROM table_name1 WHERE `id`>5
一、排序方式
二、排序的條件:任何字段,可多個字段
三、升序關鍵字:ASC(默認狀況)
四、降序關鍵字:DESC
五、舉例
SELECT field table_name ORDER BY `id` ASC
SELECT student_name, student_class FROM student ORDER BYstudent_age, student_ID ASC
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
一、語法:SELECT 字段1, 字段2, ... 字段n, 聚合函數名 (表達式) FROM 表名WHERE 條件 GROUP BY 字段1, 字段2, ... 字段n
二、配合聚合函數,利用分組進行統計
三、與having一塊兒使用
一、注意:使用 SELECT 語句,則這個 SELECT 必須使用 GROUP BY 語句!
二、語句:
1) Select 聚合函數名(字段名)from 表名 GROUP BY 字段1, 字段2, ... 字段n having 條件1 and 條件2 or 條件3
2) Select 聚合函數名(字段名)from 表名 where 條件1 and 條件2 or 條件3 GROUP BY 字段1, 字段2, ... 字段n
函數 |
描述 |
返回某列的平均值avg |
|
返回某列的行數(不包括 NULL 值)count |
|
返回被選行數count |
|
COUNT(DISTINCT column) |
返回列的不一樣值的數目count |
FIRST(column) |
返回在指定的域中第一個記錄的值first |
LAST(column) |
返回在指定的域中最後一個記錄的值last |
返回某列的最高值max |
|
返回某列的最低值min |
|
返回某列的總和sum |
一、舉例:
找到 OrderPrice 值高於 OrderPrice 平均值的客戶
SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
計算 "Orders" 表中不一樣客戶的數目:
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders
一、語句:語法:SELECT 字段1, 字段2, ... 字段n, 聚合函數名 (表達式) FROM 表名 GROUP BY 字段1, 字段2, ... 字段n having 條件1 and 條件2 or 條件3
一、
二、HAVING 對 GROUP BY 設置條件的方式= WHERE 和 SELECT 的交互方式。
三、增長 HAVING 子句緣由是,WHERE 關鍵字沒法與聚合函數一塊兒使用
四、若是 HAVING 中包含多個條件,那麼這些條件將經過 AND、OR 或 NOT 組合在一塊兒
五、舉例:
六、SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000
七、
一、指定開始位置和顯示條數
二、每頁起始點=(當前頁數 - 1) * 顯示的條數
三、最值:limit 1
四、舉例:
-- 0 表示起始點 5表示顯示條數 能夠斷定顯示爲第一頁
SELECT * FROM `table_name` WHERE `id` LIMIT 0,5;
二班男生中最高成級
Select students.id,students.name,score.score from students
inner join score on students.id=score.studentid
where students.class=」二班」 and sex=」男」
Order by score.score asc
Limit 1
SELECT * FROM `table_name`
[ WHERE ] -- 查詢條件 位置第一個
[ GROUP BY ] -- 配合聚合函數,利用分組進行統計 位置第二個
[ DESC ] -- 指定那種字段或者方式排序 位置第三個
[ LIMIT ] -- 分頁顯示 位置第三個
一、配合通配符和字符串進行匹配
二、舉例:從 "Persons" 表中選取居住在包含 "lond" 的城市裏的人
SELECT * FROM Persons WHERE City LIKE '%lond%',sex like ’%女%’
三、舉例:從 "Persons" 表中選取的這條記錄的姓氏以 "C" 開頭,而後是一個任意字符,而後是 "r",而後是任意字符,而後是 "er":
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
一、語法:SELECT 字段名(值) FROM 表名 WHERE 字段名 IN (value1,value2,...)
二、容許where中規定多個值
三、判斷操做數是否爲IN列表中的其中一個值,若是是,返回值爲1;不然返回值爲0
四、select 2 IN(1,3,5,'thks'),'thks' IN(1,3,5,'thks'); 返回值=0,1
五、SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
一、BETWEEN ... AND 會選取介於兩個值之間的數據範圍。這些值能夠是數值、文本或者日期
二、語法:SELECT * FROM 表名 between 小值 and 大值
三、舉例:
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
SELECT name FROM Persons WHERE age BETWEEN 18 AND 20
一、表別名
SELECT column_name(s) FROM 表名 AS 別名
二、字段別名
SELECT字段名 AS 別名FROM table_name
一、查詢出某個字段不重複的記錄
二、語法:SELECT DISTINCT 字段名1 FROM 表名
三、舉例:
返回不重複的用戶名:select distinct name from student
過濾掉name和id兩個字段都重複的記錄:select distinct name,id from student
一、舉例:從 "Persons" 表中選取居住在包含 "lond" 的城市裏的人
SELECT * FROM Persons WHERE City LIKE '%lond%',sex like ’%女%’
一、舉例:從 "Persons" 表中選取的這條記錄的姓氏以 "C" 開頭,而後是一個任意字符,而後是 "r",而後是任意字符,而後是 "er":
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
一、舉例:從上面的 "Persons" 表中選取居住的城市以 "A" 或 "L" 或 "N" 開頭的人
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
一、舉例:從上面的 "Persons" 表中選取居住的城市不以 "A" 或 "L" 或 "N" 開頭的人
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
SELECT * FROM Persons WHERE City LIKE '[^ALN]%'
一、沒法比較 NULL 和 「 」;它們是不等價的
二、爲null值:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL
三、不帶有 NULL 值:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS not NULL
四、
一、語句1:Select 字段1,字段2,字段3 from 表1, 表2 where 關聯關係(如a=b)
二、會產生冗餘數據——笛卡兒積(沒有加入關聯條件,兩張表之間的數據會進行任意組合的現象)。
三、舉例:查找student和class表中學號相同的信息
Select * from student, class where student.studentId = class.studentId
Select * from student as stu, class as cla where stu.studentId = cla.studentId(帶別名)
一、1、左鏈接和右鏈接指的都是外鏈接
二、2、外鏈接:指一個表中有一個字段是另外一個表的主鍵時
好比學生表裏除了學生id還有一個成績id名爲scoreId,這個scoreId就是學生成績表的主鍵,咱們須要一塊兒查詢這兩個表的內容,經過成績id把兩個表聯繫起來就是外鏈接
三、左鏈接和右鏈接的區別:
寫法上先寫哪一個表就稱之爲左,
如:學生表中有的學生成績id(scoreId)爲空,成績表中也有成績在學生中沒有出現過期
若是是左鏈接,學生表中就算學生成績爲空的學生也會被查出,而成績表中只出如今學生表中出現的成績
若是是右鏈接,則相反......
一、語句1:Select 字段1,字段2,字段3 from 表1 inner join 表2 on 關聯關係
二、舉例:查找student和class表中學號相同的信息
Select * from student inner join class on student.studentId = class.studentId
Select * from student as stu inner join class as cla on stu.studentId = cla.studentId(帶別名)
三、Inner join取交集
如:A:1、2、3、4、5; B:2、3、4、6
Inner join後展現數據2——2、3——3、4——4
一、以左表爲基礎,根據ON後給出的兩表的條件將兩錶鏈接起來。結果會將左表全部的查詢信息列出,而右表只列出ON後條件與左表知足的部分。左鏈接全稱爲左外鏈接,是外鏈接的一種。
二、語句以下:
Select 字段1,字段2,字段3 from 表1
left join 表2 on 關聯關係
left join 表2 on 關聯關係
where 過濾篩選條件(如a=b)
三、Left join
如:A(左表):1、2、3、4、5; B:2、3、4、6
Left join後展現數據1——null、2——2、3——3、4——4、5——null
一、以右表爲基礎,根據ON後給出的兩表的條件將兩錶鏈接起來。結果會將右表全部的查詢信息列出,而左表只列出ON後條件與右表知足的部分。右鏈接全稱爲右外鏈接,是外鏈接的一種
二、語句以下:
Select 字段1,字段2,字段3 from 表1
right join 表2 on 關聯關係
right join 表2 on 關聯關係
where 過濾篩選條件(如a=b)
四、right join取交集
如:A(左表):1、2、3、4、5; B(右表):2、3、4、6
right join後展現數據2——2、3——3、4——4、6——null
四、等值鏈接語句1:
Select 字段1,字段2 from 表1, 表2,表3
where 關聯關係(如a=b)
and (b=c)
and (a=c)
五、語句1:
Select 字段1,字段2,字段3 from 表1
inner join 表2 on 關聯關係
inner join 表2 on 關聯關係
六、等值鏈接會產生冗餘數據——笛卡兒積。
七、舉例:查找student、class和score表中學號相同的信息
Select * from student, class, score
where student.studentId = class.studentId
and class.studentId=score.studentId
Select * from student
inner join class on student.studentId = class.studentId
inner join score on class.studentId=score.studentId
一、語句1:
Select 字段1,字段2,字段3 from 表1
inner join 表2 on 關聯關係
inner join 表2 on 關聯關係
where 過濾篩選條件(如a=b)
and (b=c)
and (a=c)
自關聯就是屢次對同一張表進行查詢,也叫單表自查詢
二、語句:select * from student as A,student as B where A.aid=B.pid
分類
有兩類:按照位置分,按照查詢結果分 ;
按照位置分:子查詢(select 子語句)在外部查詢語句(select 父語句)中出現的位置 ;
From 子查詢 :子查詢跟在 from 以後 ;
where 子查詢:子查詢出如今 where 條件中 ;
等等
按照查詢結果分:根據查詢獲得的結果進行分類
標量子查詢:子查詢獲得的結果是 一行一列 ;
列子查詢:子查詢獲得的結果是 一列多行;
行子查詢:子查詢獲得的結果是 一行多列;
幾個出現的位置都是在 where 以後 ;
表子查詢:子查詢獲得的結果是 多行多列
出現的位置在 from 以後 ;
-- 第一步,根據班級id查詢學生
select * from student where c_id = ? ;
-- 第二步 ,查詢班級 id
select id from class where name = '軟件工程2021' ;
-- 合併
select * from student where c_id = (select id from calss where name = '軟件工程2021') ;
查詢全部在讀(名字在班級表中)的學生 ;
語句:select * from student where c_id in (select id from calss ) ;
查詢整個學生中,年齡最大而且身高是最高的
語句1低級:select * from student where age = (select max(age) from student) and height = (select max(height) from student);
語句2高級:select * from student where (age,height) = (select max(age),max(height) from student);
找出某個班中身高最高的人;
-- 先讓學生表按照身高降序排序
select * from student order by height desc ;
-- 而後按照班級分組
select * from student group by c_id ;
-- 合併在一塊兒,就是咱們須要的
select * from (select * from student group by c_id) as student order by height desc ;
在條件查詢的結果中任意匹配一個便可,等價於in
主查詢 where 列 =all(列子查詢).等於裏面的全部
主查詢 where 列 ><all(列子查詢).不等於裏面的全部
select * from student where age >=any (select age from student where studeng.class=」一班」)