Mysql加強

Mysql加強

1. 多表查詢

1.1 笛卡爾積

​ 沒有連接條件的表關係返回的結果(表之間數據組合的結果)。
​ 注意:連接 n張表,至少需要 n-1個連接條件

1.2 外鍵約束

​ 主鍵約束(PRIMARY KEY): 約束在當前表中,指定列的值非空且唯一。
​ 外鍵約束(FOREIGN KEY): A表中的外鍵列. A表中的外鍵列的值必須參照於B表中的某一列(B表主鍵)。

1.3 內連接查詢

1.3.1 顯示內連接

SELECT <selectList> FROM A [INNER] JOIN B ON A.列 = B.列

1.3.2 隱式內連接

SELECT <selectList> FROM A ,B WHERE A.列 = B.列
  • 在做等值連接的時候,若A表中和B表中的列名相對. 則可以簡寫:
SELECT   <selectList>
FROM A [INNER] JOIN B USING(**同名的列)**
前提:在emp和dept表中都有deptno列. 並且是外鍵關係。
如: SELECT * FROM emp JOIN dept USING (deptno)

1.4 外連接查詢

  • 左外連接:查詢出JOIN左邊表的全部數據查詢出來,JOIN右邊的表不匹配的數據使用NULL來填充數據。
  • 右外連接:查詢出JOIN右邊表的全部數據查詢出來,JOIN左邊的表不匹配的數據使用NULL來填充數據。
SELECT 
	<selectList> 
FROM 
	A 
	LEFT/RIGHT OUTER JOIN B ON 
	(A.column_name = B.column_name);

1.5 自連接查詢

​ 自連接查詢:把一張表看成兩張來做查詢,一定要取別名。

1.6 子查詢

​ 一個查詢語句嵌套在另一個查詢語句中,內層查詢的結果可以作爲外層查詢條件。一般嵌套在WHERE或者FROM字句中。

  • 單行單列子查詢:
-- 需求: 查詢零售價比羅技MX1100更高的所有商品信息。
SELECT * FROM product
WHERE salePrice > (
	SELECT salePrice FROM product WHERE productName = '羅技MX1100'
)
  • 單行多列子查詢
-- 需求: 查詢分類編號和折扣與羅技M100相同的所有商品信息。
SELECT * FROM product
WHERE (dir_id,cutoff)=(
	SELECT dir_id,cutoff FROM product WHERE productName = '羅技M100'
)

2. 數據操作(DML)

2.1 插入數據

1.插入完整數據記錄
INSERT INTO	table_name (column1,column2,column3...)VALUES	(value1,value2,value3...);
2.插入數據記錄一部分
INSERT INTO	table_name VALUES	(value1,value2,value3...);
3.插入多條數據記錄(MySQL特有)
INSERT INTO	table_name (column1,column2,column3...)
   VALUES (value1,value2,value3...),
          (value1,value2,value3...),
          (value1,value2,value3...)..;
4.插入查詢結果
 INSERT INTO	table_name (column1,column2,column3...)
     SELECT (column1,column2,column3...)
     FROM table_name 

2.2 修改數據

UPDATE	table_name
SET	columnName = value [, columnName = value] …
[WHERE	condition];
如果省略了where子句,則全表的數據都會被修改。注意:沒有FROM

2.3 刪除數據

DELETE FROM tablename [WHERE condition];
如果省略了where子句,則全表的數據都會被刪除

3. 數據庫的備份與恢復

  • 導出:
mysqldump -u賬戶 -p密碼 數據庫名稱>腳本文件存儲地
mysqldump -uroot -padmin jdbcdemo> C:/shop_bak.sql
  • 導入:
mysql -u賬戶 -p密碼 數據庫名稱< 腳本文件存儲地址
mysql -uroot -padmin jdbcdemo< C:/shop_bak.sql

4. 函數

  • cast函數
cast(值 as 類型)
cast('123' as SIGNED) 將123轉換爲int類型,返回值爲整型類型
  • convert函數
convert('123',SIGNED)
可以轉換的類型有限制:
	二進制,同帶binary前綴的效果 : BINARY    
    字符型,可帶參數 : CHAR()     
    日期 : DATE     
    時間: TIME     
    日期時間型 : DATETIME     
    浮點數 : DECIMAL      
    整數 : SIGNED     
	無符號整數 : UNSIGNED
  • decimal類型
column decimal(P,D)
P是表示有效數字數的精度。 P範圍爲1〜65。
D是表示小數點後的位數。 D的範圍是0~30。
  • ifnull函數
IFNULL(expression_1,expression_2);
如果expression_1不爲NULL,則IFNULL函數返回expression_1; 否則返回expression_2的結果。

5. 索引

​ 索引是創建表在表上,是對數據庫表中一列或者多列的值進行排序的一種結構。索引可以提高檢索的速度。缺點創建和維護索引會耗費內存、時間,索引需要佔用物理空間,影響數據插入的速度(解決辦法是:先刪除表中的索引,然後插入數據,插入數據完成後再創建索引)。

創建索引的語法:
-- 在studnet表的age字段上添加索引,此索引按照從小到大的順序排列。
CREATE INDEX index_age ON student(age ASC);

6. 視圖

​ 視圖是一種虛擬的表,是從一個或者多個表中導出來的數據。數據庫中只存放了視圖的定義,沒有存放視圖中的數據。這些數據還是存放在原來的表中。因此,視圖中的數據依賴於原來的表中的數據。

創建視圖的語法:
-- 創建一個視圖,包括studnet的姓名和年齡
CREATE VIEW student_view AS SELECT name,age from student; 

7.數據庫三大範式

  • 第一範式:要求表的每個字段必須是獨立的不可分割的單元(數據庫表的每一列都是不可分割的原子數據項)。

  • 第二範式:在第一範式的基礎上,要求表的除主鍵以外的字段都和主鍵有依賴關係的(屬性完全依賴於主鍵)。

  • 第三範式:在第二範式的基礎上,要求表的除主鍵以外的字段只能和主鍵有直接決定的依賴關係(任何非主屬性不依賴於其它非主屬性)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章