CREATE TABLE USER( id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT "編號", password VARCHAR(256) NOT NULL COMMENT '密碼', nickName VARCHAR(32) NOT NULL COMMENT '暱稱', bio VARCHAR(256) COMMENT '簡介' PRIAMRY KEY(id) )
ALTER TABEL 原表名 RENAME 新表名
ATTER TABLE table_name ADD cloumn_name datatype 例如: ALTER TABLE USER ADD sid VARCHAR(128) NOT NULL COMMENT 'Cookie'
ALTER TABLE table_name DROP COLUNM column_name ALTER TABLE table_name DROP INDEX index_name 例如: ALTER TABLE USER DROP COLUMN sid1
ALTER TABLE table_name ALTER COLUMN column_name datatype 例如: ALTER TABLE USER MODIFY COLUMN bio int COMMENT '簡介'
ALTER TABLE table_name CHANGE COLUMN column_name new_column_name datatype 例如: ALTER TABLE USER CHANGE COLUMN id id1 INT UNSIGNED NOT NULL COMMENT '編號'
*刪除數據庫/表mysql
DROP DATABASE 數據庫名 DROP TABLE 表名
TRUNCATE TABLE 表名 DROP TABLE 表名 DELETE FROM 表名 WHERE……
INSERT INTO 表名 VALUES(value1,value2,value3……) 例如: INSERT INTO USER VALUES('KyLin','123456')
INSERT INTO 表名(列1,列2……) VALUES(值1,值2……) INSERT INTO User(id,nickName,password,email,votes) VALUES(1,'KyLin','123456','1803660046@qq.com',1)
UPDATE 表名 SET 列名1=新值1,列名2=新值2…… WHERE 條件 例如: UPDATE USER SET nickName='overload',sid='you guess guess' WHERE id=1
DELETE FROM 表 WHERE 條件 例如: DELETE FROM USER WHERE id=1
DELETE FROM USER
SLECT DISTINCT 列名 FROM 表
SELECT 列名 FROM 表 WHERE 列 運算符 值(條件) 運算符 = != > >= < <= BETWEEN(在某個範圍內) LIKE(某種搜索方式) 例如: SELECT id FROM USER WHERE nickName='overload'
AND和OR同時使用: 選出姓爲'Thomas'或者爲'William'而且名爲'Carter'的人的信息 SELECT * FROM Persons WHERE (FirstName='Thomas' or FirstName=='William') AND LastName='Carter' 小建議:儘量的減小or的使用(用in代替),由於使用了or,效率呈指數型降低
能夠對多個列進行不一樣的排序,知足的條件是從左往右依次選擇 例如: SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC,OrderNumber ASC 結果: 先對全部的結果集按照Company降序排序,若是有相同的Company結果,則按照OrderNumber升序排序
SELECT * FROM book_borrow_history LIMIT 0,5
SELECT * FROM USER WHERE nickName LIKE '廣%'
通配符 | 描述 |
---|---|
% | 代替一個或者多個字符 |
_ | 僅代替一個字符 |
[charlist] | 字符列中的任何單一字符 |
[^charlist]或者[!charlist] | 不在字符列中的任何單一字符 |
"Persons" 表中選取名字的第一個字符以後是 "eorge" 的人: SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
選取居住的城市以 "A" 或 "L" 或 "N" 開頭的人: SELECT * FROM Persons WHERE City LIKE '[ALN]%'
選取居住的城市不以 "A" 或 "L" 或 "N" 開頭的人: SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
SELECT * FROM TABLE WHERE COLUMN_NAME IN (value1,value2……) 例如: 選取姓氏爲 Adams 和 Carter 的人 SELECT *FROM Persons WHERE FirstName IN('Adams','Carter') 則只要是知足這個條件(至關於OR)的都會顯示出來
SELECT * FROM TABLE WHERE COLUNM_NAME BETWEEN VALUE1 AND VALUE2 注意:mysql的是[value1,value2) 是這樣一種範圍 若是想表示不在這個範圍內,則加上NOT便可
當BETWEEN……AND的值是文本的時候,則代表選取的是表中在這個範圍之間的記錄 例如: SELECT * FROM Persons WHERE lastName BETWEEN 'Adams' ADN 'Carter' 則選取出來的結果就是 Adams和Bush這兩條的記錄
Persons表sql
lastName | firstName |
---|---|
Adams | John |
Bush | George |
Carter | Thomas |
Gates | Bill |
SELECT b.book_name AS BOOKNAME,b.stu_id AS ID FROM book_borrow_history AS b WHERE b.stu_id='1506200043'
SELECT CLOUMN_NAME(S) FROM TABLE_NAME1 INNER JOIN TABLE_NAME2 ON TABLE_NAME1.COLUMN=TABLE_NAME2.COLUMN 關鍵字:INNER JOIN……ON 條件
查詢用戶的訂單,沒有用戶的訂單不顯示 SELECT user.name,orders.* FROM user INNER JOIN orders ON user.id=orders.user_id
SELECT COLUMN_NAME(S) FROM TABLE_NAME1 LEFT JOIN TABLE_NAME2 ON TABLE_NAME1.COLUMN=TABLE_NAME2.COLUMN ORDER BY COLUMN_NAME DESC(ASC) 關鍵字:LEFT JOIN……ON 條件
查詢全部用戶的訂單詳情——便是以用戶爲主體,全部的用戶都要顯示 SELECT user.name,orders.* FROM user LEFT JOIN orders ON user.id=orders.user_id
SELECT COLUMN_NAME(S) FROM TABLE_NAME1 RIGHT JOIN TABLE_NAME2 ON TABLE_NAME1.COLUMN=TABLE_NAME2.COLUMN
SELECT COLUMN_NAME(S) FROM TABLE_NAME1 FULL JOIN TABLE_NAME2 ON TABLE_NAME1.COLUMN=TABLE_NAME2.COLUMN
SELECT id FROM Users WHERE NAME='張三' SELECT * FROM Orders WHERE user_id='張三的id' 整合: SELECT *FROM Orders WHERE user_id=(SELECT id FROM Users WHERE NAME='張三')
一行多列(多個值):使用 IN數據庫
SELECT user_id FROM Orders WHERE price>300 SELECT *FROM Users WHERE id='從訂單表獲取到的user_id' 整合: SELECT *FROM Users WHERE id in(SELECT user_id FROM Orders WHERE price>300)
多行多列(至關於另一個表)函數
SELECT Orders.* FROM Orders WHERE price>300 整合在一塊兒(基本寫法) SELECT Temp.*,Users.* FROM Users,(SELECT Orders.* FROM Orders WHERE price>300) AS Temp WHERE Temp.user_id=Users.id 內鏈接寫法: SELECT Orders.*,Users.* from Orders INNER JOIN Users ON Users.id=Orders.user_id and orders.price>300;
* INDEX(索引) * VIEW(視圖)
SELECT COLUMN_NAME(S) FROM TABLE_NAME1 UNION SELECT COLUMN_NAME(S) FROM TABLE_NAME2 默認地,UNION 操做符選取不一樣的值。若是容許重複的值,請使用 UNION ALL。
Employees_China:學習
E_ID | E_NAME |
---|---|
01 | Zhang, Hua |
02 | Wang, Wei |
03 | Carter, Thomas |
04 | Yang, Ming |
Employees_USA:code
E_ID | E_NAME |
---|---|
01 | Adams, John |
02 | Bush, George |
03 | Carter, Thomas |
04 | Gates, Bill |
則若是想獲取兩個表的全部僱員的話對象
SELECT E_NAME FROM Employees_China UNION SELECT E_NAME FROM Employees_USA 這樣會對重複的名字進行任意的選取其中之一,若想顯示所有的話UNION ALL
在表上建立一個簡單的索引。容許使用重複的值: CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME) 註釋:"COLUMN_NAME" 規定須要索引的列。 在表上建立一個惟一的索引。惟一的索引意味着兩個行不能擁有相同的索引值。 CREATE UNIQUE INDEX index_name ON table_name (column_name) 例如: 若是但願以降序索引某個列中的值,能夠在列名稱以後添加保留字 DESC: CREATE INDEX PersonIndex On Person(firstName DESC) 若是但願索引不止一個列,能夠在括號中列出這些列的名稱,用逗號隔開: CREATE INDEX PersonIndex ON Person (lastName, firstName)
VIEW視圖排序
但願查找每一個客戶的訂單總額 錯誤: SELECT Customer,SUM(OrderPrice) FROM Orders 錯誤緣由:首先SUM(OrderPrice)返回的是一個值,若是沒有使用group by 的話,那麼就是計算的全部客戶的訂單的總額 正確: SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer 正確緣由:由於使用的GROUP BY,那麼相同客戶的訂單(一個客戶能夠有多個訂單)就會合並在一塊兒,那麼SUM()出來的就是每一個客戶本身的訂單的總額 擴展: 也能夠對多個列進行GROUP BY操做 SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
SELECT column_name,aggregate_function(column_name),FROM table_name where column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) OPERATOR VALUE
找出訂單總金額少於2000元的客戶 SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000 但願查找客戶 "Bush" 或 "Adams" 擁有超過 1500 的訂單總金額 SELECT Customer,SUM(OrderPrice) FROM Orders WHERE Customer in("Bush","Adams") GROUP BY Customer HAVING SUM(OrderPrice)>1500