1.SQL語句簡單介紹:
SQL(結構化查詢語言(Structured Query Language))包含6個部分(數據查詢語言DQL、數據操作語言DML、數據定義語言DDL、事務處理語言TPL、數據控制語言DCL、指針控制語言CCL),在Java中常用的有三種,DQL、DML、DDL:
一:數據查詢語言(DQL):
其語句,也稱爲“數據檢索語句”,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其他類型的SQL語句一起使用。
二:數據操作語言(DML):
其語句包括動詞INSERT,UPDATE和DELETE。它們分別用於添加,修改和刪除表中的行。也稱爲動作查詢語言。
三:數據定義語言(DDL):
其語句包括動詞CREATE和DROP。在數據庫中創建新表或刪除表(CREAT TABLE 或 DROP TABLE);爲表加入索引等。DDL包括許多與數據庫目錄中獲得數據有關的保留字。它也是動作查詢的一部分。
四:事務處理語言(TPL):
它的語句能確保被DML語句影響的表的所有行及時得以更新。TPL語句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
五:數據控制語言(DCL):
它的語句通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數據庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對錶單個列的訪問。
六:指針控制語言(CCL):
它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作。
2.MySQL列類型對應Java的數據類型:
MySQL列類型 Java數據類型
-------------------------------------------------------
INT: int/Integer
BIGINT: long/Long
FLOAT float/Float
DOUBLE double/Double
DECIMAL BigDecimal
---------------------------------------------------------
3.數據庫的操作:
查看數據庫服務器存在哪些數據庫:
SHOW DATABASES;
使用指定的數據庫:
USE database_name;
創建指定名稱的數據庫:
CREATE DATABASE database_name;
刪除數據庫:
DROP DATABASE database_name;
注意:在MySQL中,日期時間值使用單引號引起來。 相當於Java中Date,Calender
4.表的操作:
創建表:
1.先進入某一個數據庫: use database_name;(指定創建的表應該在哪個數據庫)
2.輸入建表的SQL命令:
CREATE TABLE 表名(
列名1 列的類型 [約束],
列名2 列的類型 [約束],
....
列名N 列的類型 約束
);
注意:最後一行沒有逗號
注意:不能使用MySQL中的關鍵字作爲標識符.
比如:訂單表(order),但是ORDER是SQL中排序的關鍵字.
解決方案:
方式1:使用反引號,把關鍵字引起來:`ORDER`.
方式2:開發中,習慣t_表名;
查看數據庫中存在哪些表:
SHOW TABLES;
查看錶結構:
DESC table_name;
查看錶的詳細定義:(顯示創建表的語句cd)
SHOW CREATE TABLE table_name;(定義表的SQL語句)
刪除表:
DROP TABLE table_name;
表的約束:
表的約束(針對於某一列):
1.非空約束(NK):NOT NULL,不允許某列的內容爲空。
2.設置列的默認值:DEFAULT。
3.唯一約束(UK):UNIQUE,在該表中,該列的內容必須唯一。
4.主鍵約束:PRIMARY KEY,約束在當前表中,指定列的值非空且唯一。
5.主鍵自增長:AUTO_INCREMENT,從1開始,步長爲1。(常和主鍵配合使用)
6.外鍵約束:FOREIGN KEY,A表中的外鍵列.A表中的外鍵列的值必須參照於B表中的某一列(B表主鍵)可以爲NULL
主表:不用依賴其他表,可以獨立存在
從表:外鍵列的數據要參照於主表中的數據,有外鍵列的表爲從表
主鍵/外鍵的起名規則:
主鍵:id
外鍵:xx_id:xx只的是參照表的名詞,productdir_id,也可以簡寫,dir_id
注意:在MySQL中,InnoDB支持事務和外鍵.
修改表的存儲引擎爲InnoDB:
ALTER TABLE 表名 ENGINE='InnoDB';
開發中,有時從性能考慮,我們會刪除外鍵.但是依然使用InnoDB存儲引擎.
消除結果中重複的數據。
語法:
SELECT DISTINCT 列名,..
設置列名的別名。
關鍵字:[AS]
1、改變列的標題頭;
2、用於表示計算結果的含義;
3、作爲列的別名;
4、如果別名中使用特殊字符,或者是強制大小寫敏感,或有空格時,都需加單引號;--->英文單詞
需求:查詢所有貨品的id,名稱,各進50個,並起別名的成本
SELECT id,productName,costPrice * 50 'price' FROM product
使用別名注意事項:
SQL語句是有一定的執行順序的,如若別名還沒定義出來,就先使用了,就會出錯,如:
SELECT id,productName,salePrice*cutoff pf FROM product WHERE pf>350(錯誤的)
SQL語句是先執行where語句再執行select的,而在執行where時,pf都還定義,故會出錯
SQL的執行順序:
1.先執行FROM子句: 確定查詢哪一張表
2.接着執行WHERE : 過濾篩選條件
3.接着做SELECT : 確定選擇的列
4.最後做ORDER BY: 對結果集按照某列排序
優先級:
優先級 運算符
------------------------------------
1 所有比較運算符
2 NOT
3 AND
4 OR
注意:括號將跨越所有優先級規則
對結果集排序
使用ORDER BY子句將結果的記錄排序.
ASC : 升序,缺省。
DESC: 降序。
ORDER BY 子句出現在SELECT語句的最後。
格式:
SELECT <selectList>
FROM table_name
WHERE 條件
ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...;
注意:別名不能使用引號括起來,否則不能排序。(下面的排序將失效)
SELECT *,salePrice*cutoff 'pf' FROM product WHERE productName LIKE '%M%' ORDER BY 'pf'
SELECT語句執行順序:
先執行FROM--->接着執行WHERE--->再執行SELECT--->最後執行ORDER BY