數據庫-增刪查改

數據庫--增刪查改

1、數據庫

一、前端native,後端mysql,二者對接。前端

二、概念:數據庫的做用:把數據以表的形式存儲起來,方便查詢。mysql

三、學習重點:查詢語言sql

2、RDBMS

一、關係型數據庫系統數據庫

二、核心:以二維表的形式存儲數據後端

三、行:一條記錄,一個事物的信息。函數

列:一個字段,一個事物的某一種屬性。學習

四、一個表中全部行是一類事物的集合測試

五、一個數據庫由不少表組成。編碼

 

3、SQL

一、結構化查詢語言,用於關係型數據庫spa

二、不區分大小寫

三、重點:查詢

4、MySQL

一、開源、免費、支持多平臺

5、安裝MySQL

一、端口號:通常爲3306

二、服務端:啓動、中止、重啓

三、客戶端:命令行客戶端、native

6、鏈接native和MySQL

一、點擊native界面「鏈接」

二、主機名或IP地址、端口、用戶名、密碼。隨便寫鏈接名。

三、點擊鏈接測試。點擊肯定

四、點擊鏈接名,啓用變色。

五、建立數據庫

六、建立表、添加字段、設計表

七、增刪查改數據

7、數據類型

一、整數:int(無符號-2147483648~2147483647,有符號0-4294967295),長度沒有做用

二、小數:decimal,如decimal52)表示共存5位數,小數2位,整數3位。

三、字符串:varchar,範圍(0~65533),varchar表示最多3個字符,一箇中文或一個字符都佔據一個字符。

8、約束

一、主鍵(primary key):int類型、無符號、自動遞增、惟一的標識一條記錄

1) Student_ID int(10) UNSIGNED NOT NULL PRIMARY KEY auto_increment

二、非空約束(not null):不容許爲空值

三、惟一(unique):此字段步雲山重複

四、默認值(default):不填寫此值會使用默認值

五、外鍵(foreign key):兩個表之間的關聯關係

六、索引:快速訪問數據庫表中的特定信息、索引是對數據庫中表中一列或者多列的值進行排序的一種結構,相似書籍的目錄

9、備份和恢復

一、DBA人員維護

二、備份:

1) 鼠標點擊數據庫,右擊選擇轉儲SQL文件》結構和數據

2) 選擇文件保存位置,點擊保存。

三、恢復:

1) 刪除原先數據庫,新建數據庫。除名稱不一致外,字符集和排序規則需一致

2) 選擇數據庫,右鍵運行SQL文件

3) 文件:選擇文件所在位置,選擇對應文件。點擊「開始」

10、數據庫增刪查改

(一)數據庫

一、建立數據庫:

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)

ALTER TABLE 表名 ADD 字段名 類型 約束

 

(四)增長(insert into)

一、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);

(五)刪除(delete)

1delete語法:delete from 表名 where id>10

(五)查詢(Select)

一、Select語法:SELECT 字段1,字段2 FROM 表名

1) 查詢語句中你可使用一個或者多個表,表之間使用逗號(,)分割,並使用WHERE語句來設定查詢條件。

2) SELECT 命令能夠讀取一條或者多條記錄。

3) 你可使用星號(*)來表示表中所有數據:select * from students

 

(六)修改或更新(update)

一、UPDATE 表名 SET字段=, 字段2=2,WHERE `id`>10

11、操做符

(一)篩選過濾Where語法:

一、篩選條件

二、關係

1) 能夠在 WHERE 子句中指定任何條件。

2) 運算關係:

① 等於=

② 小於<

③ 大於>

④ 大於等於>=

⑤ 小於等於<=

⑥ 不等於!=<>

3) 邏輯關係:

① 並、和=and

② =or

③ 不、非=not

4) WHERE 子句相似於程序語言中的 if 條件,根據 MySQL 表中的字段值來讀取指定的數據。

5) 若是給定的條件在表中沒有任何匹配的記錄,那麼查詢不會返回任何數據。

三、舉例:

SELECT field1 FROM table_name1 WHERE `id`>5

(二)排序order by語法

一、排序方式

二、排序的條件任何字段,可多個字段

三、升序關鍵字: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

 

 

(三)分組GROUP BY

一、語法: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(column)

返回某列的平均值avg

COUNT(column)

返回某列的行數(不包括 NULL 值)count

COUNT(*)

返回被選行數count

COUNT(DISTINCT column)

返回列的不一樣值的數目count

FIRST(column)

返回在指定的域中第一個記錄的值first

LAST(column)

返回在指定的域中最後一個記錄的值last

MAX(column)

返回某列的最高值max

MIN(column)

返回某列的最低值min

SUM(column)

返回某列的總和sum

一、舉例:

找到 OrderPrice 值高於 OrderPrice 平均值的客戶

SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

計算 "Orders" 表中不一樣客戶的數目:

SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders

(五)篩選having(與聚合函數一塊兒用)

一、語句:語法:SELECT 字段1, 字段2, ... 字段n, 聚合函數名 (表達式) FROM 表名 GROUP BY 字段1, 字段2, ... 字段n having 條件1 and 條件2 or 條件3

一、

二、HAVING GROUP BY 設置條件的方式= WHERE SELECT 的交互方式。

三、增長 HAVING 子句緣由是,WHERE 關鍵字沒法與聚合函數一塊兒使用

四、若是 HAVING 中包含多個條件,那麼這些條件將經過 ANDOR NOT 組合在一塊兒

五、舉例:

六、SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000

七、

(六)分頁/最值:Limit 語法

一、指定開始位置和顯示條數

二、每頁起始點=當前頁數 - 1* 顯示的條數

三、最值:limit 1

四、舉例:

-- 0 表示起始點 5表示顯示條數 能夠斷定顯示爲第一頁

SELECT * FROM `table_name` WHERE `id` LIMIT 0,5;

二班男生中最高成級

Select  students.idstudents.namescore.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 ] -- 分頁顯示     位置第三個

 

(七)模糊查詢Like操做符

一、配合通配符和字符串進行匹配

二、舉例:從 "Persons" 表中選取居住在包含 "lond" 的城市裏的人

SELECT * FROM Persons WHERE City LIKE '%lond%',sex like %%

三、舉例:從 "Persons" 表中選取的這條記錄的姓氏以 "C" 開頭,而後是一個任意字符,而後是 "r",而後是任意字符,而後是 "er"

SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'

(八)範圍查詢In/not in操做符

一、語法: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操做符

一、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

 

(十)As別名

一、表別名

SELECT column_name(s) FROM 表名 AS 別名

二、字段別名

SELECT字段名 AS 別名FROM table_name

 

(十一)去重distinct

一、查詢出某個字段不重複的記錄

二、語法:SELECT DISTINCT 字段名1 FROM 表名

三、舉例:

返回不重複的用戶名:select distinct name from student

過濾掉nameid兩個字段都重複的記錄: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'

三、*匹配0個或多個在它前面的字符

四、[字符集](字符集中的任何單一字符,只有一個)

一、舉例:從上面的 "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]%'

12、空判斷

一、沒法比較 NULL 和 「 」;它們是不等價的

二、null值:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL

三、不帶有 NULL 值:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS not NULL

四、

十3、鏈接查詢(多表查詢)

(一)等值鏈接

一、語句1Select 字段1,字段2,字段3  from 1, 2 where 關聯關係(a=b)

二、會產生冗餘數據——笛卡兒積(沒有加入關聯條件,兩張表之間的數據會進行任意組合的現象)。

三、舉例:查找studentclass表中學號相同的信息

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)爲空,成績表中也有成績在學生中沒有出現過期

若是是左鏈接,學生表中就算學生成績爲空的學生也會被查出,而成績表中只出如今學生表中出現的成績

若是是右鏈接,則相反......

 

 

(二)內鏈接-推薦 (inner join ...on)

一、語句1Select 字段1,字段2,字段3  from 1 inner join 2 on 關聯關係

二、舉例:查找studentclass表中學號相同的信息

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:12345;          B2346

Inner join後展現數據2——23——34——4

 

(三)左鏈接(left join)

一、以左表爲基礎,根據ON後給出的兩表的條件將兩錶鏈接起來。結果會將左表全部的查詢信息列出,而右表只列出ON後條件與左表知足的部分。左鏈接全稱爲左外鏈接,是外鏈接的一種。

二、語句以下:

Select 字段1,字段2,字段3  from 1

left join 2 on 關聯關係

left join 2 on 關聯關係

where 過濾篩選條件(a=b)

三、Left join

如:A(左表):12345;          B2346

Left join後展現數據1——null2——23——34——45——null

(四)右鏈接(right join)

一、以右表爲基礎,根據ON後給出的兩表的條件將兩錶鏈接起來。結果會將右表全部的查詢信息列出,而左表只列出ON後條件與右表知足的部分。右鏈接全稱爲右外鏈接,是外鏈接的一種

二、語句以下:

Select 字段1,字段2,字段3  from 1

right join 2 on 關聯關係

right join 2 on 關聯關係

where 過濾篩選條件(a=b)

四、right join取交集

如:A(左表):12345;          B(右表)2346

right join後展現數據2——23——34——46——null

(五)3錶鏈接

四、等值鏈接語句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 關聯關係

六、等值鏈接會產生冗餘數據——笛卡兒積。

七、舉例:查找studentclassscore表中學號相同的信息

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

 

(八)子查詢

  1. 子查詢返回的結果做爲主查詢的條件——標量子查詢、列子查詢、行子查詢
  2. 子查詢返回的結果做爲主查詢的數據源(表)——表子查詢
  3. 子查詢,查詢是創建別的查詢結果之上的,也就是一個 select 語句中包含另一個 select 語句

分類

有兩類:按照位置分,按照查詢結果分

 

按照位置分:子查詢(select 子語句)在外部查詢語句(select 父語句)中出現的位置 ;

From 子查詢 :子查詢跟在 from 以後 ;

where 子查詢:子查詢出如今 where 條件中 ;

等等

按照查詢結果分:根據查詢獲得的結果進行分類

標量子查詢:子查詢獲得的結果是 一行一列

列子查詢:子查詢獲得的結果是 一列多行;

行子查詢:子查詢獲得的結果是 一行多列;

幾個出現的位置都是在 where 以後 ;

表子查詢:子查詢獲得的結果是 多行多列

出現的位置在 from 以後 ;

(九)標量子查詢(一行一列,單個數)

  1. 標量子查詢:返回單一值的子查詢。子查詢返回的是單一值的標量,如一個數字或一個字符串,也是子查詢中最簡單的返回形式
  2. 知道班級名字,查詢出該班全部學生

-- 第一步,根據班級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') ;

(十)列子查詢(一列多行_in)

查詢全部在讀(名字在班級表中)的學生

語句: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 ;

(十三)子查詢中關鍵字

  1. in:主查詢 where 條件 in (列子查詢)
  2. =any|some:主查詢 where =any(列子查詢)

在條件查詢的結果中任意匹配一個便可,等價於in

  1. all

主查詢 where =all(列子查詢).等於裏面的全部

主查詢 where ><all(列子查詢).不等於裏面的全部

select * from student where age >=any (select age from student where studeng.class=」一班」) 

 

 

相關文章
相關標籤/搜索