1. 程式人生 > >MySQL資料庫 sql語句及其含義

MySQL資料庫 sql語句及其含義

本文主要記錄常用sql語句及對應意義,有一定基礎可直接檢視使用,需要學習者,可轉向另一篇博文

 1、查詢語句 

SELECT id,stuName,age,sex,gradeName FROM t_student ;            查詢表中全部資料(返回全部欄位)
SELECT stuName,id,age,sex,gradeName FROM t_student ;            查詢表中指定資料(返回指定欄位)
SELECT * FROM t_student;            查詢表中全部資料(同一)
SELECT stuName,gradeName FROM t_student;            查詢表中指定資料(返回指定欄位)
SELECT * FROM t_student WHERE id=1;            查詢表中id=1的資料(返回id=1的全部欄位)
SELECT * FROM t_student WHERE age>22;            查詢表中年齡大於22歲的資料(返回全部欄位)
SELECT * FROM t_student WHERE age IN (21,23);            查詢表中年齡為21或23的資料(返回全部欄位)
SELECT * FROM t_student WHERE age NOT IN (21,23);            查詢表中年齡不是21或23的資料(返回全部欄位)
SELECT * FROM t_student WHERE age BETWEEN 21 AND 24;            查詢年齡在21-24之間的資料(返回全部欄位)
SELECT * FROM t_student WHERE age NOT BETWEEN 21 AND 24;            查詢年齡不在21-24之間的資料(返回全部欄位)
SELECT * FROM t_student WHERE stuName LIKE '張三';               查詢名字與張三相同的資料(返回全部欄位)
SELECT * FROM t_student WHERE stuName LIKE '張三%';            查詢名字中以張三開頭的資料(返回全部欄位)(見上圖)
SELECT * FROM t_student WHERE stuName LIKE '張三__';            查詢名字中含有張三但是是三個字的名字的資料(返回全部欄位)
SELECT * FROM t_student WHERE stuName LIKE '%張三%';            查詢名字中含有張三的全部資料(返回全部欄位)
SELECT * FROM t_student WHERE sex IS NULL;            查詢性別為空的資料(返回全部欄位)
SELECT * FROM t_student WHERE sex IS NOT NULL;            查詢性別不為空的資料(返回全部欄位)
SELECT * FROM t_student WHERE gradeName='一年級' AND age=23            查詢年級為‘一年級’並且年齡為‘23’的資料(返回全部欄位)
SELECT * FROM t_student WHERE gradeName='一年級' OR age=23            查詢年級為‘一年級’或年齡為‘23’的學生資料(返回全部欄位)
SELECT DISTINCT gradeName FROM t_student;            查詢該表中所有的年級並去掉重複部分(返回年級)
SELECT * FROM t_student ORDER BY age ASC;            查詢該表中全部資料,並以年齡進行升序排序(返回全部欄位)ASC表示升序排列
SELECT * FROM t_student ORDER BY age DESC;            查詢該表中全部資料,並以年齡進行升序排序(返回全部欄位)ASC表示升序排列
SELECT * FROM t_student GROUP BY gradeName;            查詢根據年級來分組的結果(返回全部欄位)無現實意義(見上圖)
SELECT gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName;            查詢該表中根據年級分組的結果,返回年級和該年級中所有的學生姓名(見上圖)
SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName;            查詢該表中根據年級分組的結果,返回年級和該年級中所有的學生數量(見上圖)
SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName HAVING COUNT(stuName)>3;            查詢該表中根據年級分組並且該年級人數要大於3的結果,返回年級和該年級中所有的學生數量(見上圖)
SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName WITH ROLLUP;            查詢該表中根據年級分組的結果,返回年級和該年級中所有的學生數量及學生總人數(見上圖)
SELECT gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName WITH ROLLUP;            查詢該表中根據年級分組的結果,返回年級和該年級中所有的學生姓名及全部學生的姓名(見上圖)
SELECT * FROM t_student LIMIT 0,5;            在該表中查詢從0開始,取5組資料(返回全部欄位)
SELECT * FROM t_student LIMIT 5,5;            在該表中查詢從5開始,取5組資料(返回全部欄位)
SELECT * FROM t_student LIMIT 10,5;            在該表中查詢從10開始,取5組資料(返回全部欄位)

2、聚合函式查詢

SELECT COUNT(*) FROM t_grade;            查詢該表中資料的條數
SELECT COUNT(*) AS total FROM t_grade;            查詢該表中資料的條數並命名為total
SELECT stuName,COUNT(*) FROM t_grade GROUP BY stuName;            根據stuName分組, 並返回學生姓名和該姓名對應的數量     
SELECT stuName,SUM(score) FROM t_grade WHERE stuName="張三";            查詢張三的分數總和
SELECT stuName,SUM(score) FROM t_grade GROUP BY stuName;            根據學生的姓名分組,返回每個姓名對應的分數總和
SELECT stuName,AVG(score) FROM t_grade WHERE stuName="張三";            查詢張三的分數的平均值
SELECT stuName,AVG(score) FROM t_grade GROUP BY stuName;            根據學生姓名進行分組,返回每個姓名對應的分數的均值
SELECT stuName,course,MAX(score) FROM t_grade WHERE stuName="張三";           查詢張三的分數的最大值,返回姓名,課程,課程分數        
SELECT stuName,MAX(score) FROM t_grade GROUP BY stuName;            根據學生姓名進行分組,返回每個姓名對應的最高分
SELECT stuName,course,MIN(score) FROM t_grade WHERE stuName="張三";             查詢張三的分數的最小值,返回姓名,課程,課程分數         
SELECT stuName,MIN(score) FROM t_grade GROUP BY stuName;            根據學生姓名進行分組,返回每個姓名對應的最低分

3、連線查詢

SELECT * FROM t_book,t_bookType;            笛卡爾乘積
SELECT * FROM t_book,t_bookType WHERE t_book.bookTypeId=t_bookType.id;            內連線查詢,查詢條件為t_book表中bookTypeId與表t_bookType中的id相等
SELECT bookName,author,bookTypeName FROM t_book,t_bookType WHERE t_book.bookTypeId=t_bookType.id;           內連線查詢,查詢條件為t_book表中bookTypeId與表t_bookType中的id相等 

SELECT tb.bookName,tb.author,tby.bookTypeName FROM t_book tb,t_bookType tby WHERE tb.bookTypeId=tby.id;    內連線查詢,查詢條件為t_book表中bookTypeId與表t_bookType中的id相等 (使用別名)

SELECT * FROM t_book LEFT JOIN t_bookType ON t_book.bookTypeId=t_bookType.id;            左連線查詢
SELECT tb.bookName,tb.author,tby.bookTypeName FROM t_book tb LEFT JOIN t_bookType tby ON tb.bookTypeId=tby.id;            左連線查詢(使用別名)
SELECT * FROM t_book RIGHT JOIN t_bookType ON t_book.bookTypeId=t_bookType.id;            右連線查詢
SELECT tb.bookName,tb.author,tby.bookTypeName FROM t_book tb RIGHT JOIN t_bookType tby ON tb.bookTypeId=tby.id;        右連線查詢(使用別名)
SELECT tb.bookName,tb.author,tby.bookTypeName FROM t_book tb,t_bookType tby WHERE tb.bookTypeId=tby.id AND tb.price>70;            多表聯查

4、子查詢

SELECT * FROM t_book WHERE booktypeId IN (SELECT id FROM t_booktype);(1先在t_booktype表中查詢所有id)之後在t_book表中查詢booktypeID與id相等的資料
SELECT * FROM t_book WHERE booktypeId NOT IN (SELECT id FROM t_booktype);

SELECT * FROM t_book WHERE price>=(SELECT price FROM t_pricelevel WHERE priceLevel=1);(先內查詢,在t_pricelevel表中查詢priceLevel=1資料條中的price)之後外查詢,在t_book表中查詢price>=內查詢對的price的資料

SELECT * FROM t_book WHERE EXISTS (SELECT * FROM t_booktype);(先內查詢,若表t_booktype中有資料則返回TRUE,執行外查詢,否則結束)之後進行外查詢
SELECT * FROM t_book WHERE NOT EXISTS (SELECT * FROM t_booktype);

SELECT * FROM t_book WHERE price>= ANY (SELECT price FROM t_pricelevel);(先內查詢,在t_pricelevel表中查詢所有的price)之後外查詢,要求price大於任意一個內查詢的price
SELECT * FROM t_book WHERE price>= ALL (SELECT price FROM t_pricelevel);(先內查詢,在t_pricelevel表中查詢所有的price)之後外查詢,要求price大於所有的內查詢price

5、合併查詢

SELECT id FROM t_book;            準備材料
SELECT id FROM t_booktype;            準備材料
SELECT id FROM t_book UNION SELECT id FROM t_booktype;       將兩個表中的id合併 (去除相同資料)
SELECT id FROM t_book UNION ALL SELECT id FROM t_booktype;            將兩張表中的id合併(保留相同資料)


SELECT * FROM t_book WHERE id=1;        查詢id=1的全部資料
SELECT * FROM t_book t WHERE t.id=1;            使用表別名的方式查詢id=1的全部資料
SELECT t.bookName FROM t_book t WHERE t.id=1;        使用表別名的方式查詢表t_book中id=1的資料條中bookName的資料
SELECT t.bookName bName FROM t_book t WHERE t.id=1;            使用欄位別名
SELECT t.bookName AS bName FROM t_book t WHERE t.id=1;            使用欄位別名

6、增刪改查

    (1)增

INSERT INTO t_book VALUES(NULL,'我愛我家',20,'張三',1);         按照欄位名稱插入資料          
INSERT INTO t_book(id,bookName,price,author,bookTypeId) VALUES(NULL,'我愛我家',20,'張三',1);            按照欄位名稱插入資料,與上一條效果相同
INSERT INTO t_book(bookName,author) VALUES('我愛我家','張三');            向指定欄位插入資料
INSERT INTO t_book(id,bookName,price,author,bookTypeId) VALUES (NULL,'我愛我家2',20,'張三',1),(NULL,'我愛我家3',20,'張三',1);            向表中插入多條資料

    (2)刪

DELETE FROM t_book WHERE id=5;

DELETE FROM t_book WHERE bookName='我';

    (3)改

UPDATE t_book SET bookName='Java程式設計思想',price=120 WHERE id=1;            更新表t_book中,id=1中bookName與price的資料

UPDATE t_book SET bookName='我' WHERE bookName LIKE '%我愛我家%';         更新表t_book中,bookName為‘我愛我家’的書籍名稱為‘我’   

   7、索引

CREATE TABLE t_user1(id INT ,
                     userName VARCHAR(20),
                     PASSWORD VARCHAR(20),
                     INDEX (userName)  在建立表的時候建立索引
                 );
                 
CREATE TABLE t_user2(id INT ,
                     userName VARCHAR(20),
                     PASSWORD VARCHAR(20),
                     UNIQUE INDEX index_userName(userName)
                 );
               
CREATE TABLE t_user3(id INT ,
                     userName VARCHAR(20),
                     PASSWORD VARCHAR(20),
                     INDEX index_userName_password(userName,PASSWORD)
                 );
                 
CREATE  INDEX index_userName ON t_user4(userName);
CREATE  UNIQUE INDEX index_userName ON t_user4(userName);
CREATE  INDEX index_userName_password ON t_user4(userName,PASSWORD);
ALTER TABLE t_user5 ADD INDEX index_userName(userName);
ALTER TABLE t_user5 ADD UNIQUE INDEX index_userName(userName);
ALTER TABLE t_user5 ADD INDEX index_userName_password(userName,PASSWORD);
DROP INDEX index_userName ON t_user5;
DROP INDEX index_userName_password ON t_user5;

8、檢視 

CREATE VIEW v1 AS SELECT * FROM t_book;             建立檢視:選擇表t_book中的全部資訊,從而建立檢視v1;(單表)
CREATE VIEW v2 AS SELECT bookName,price FROM t_book;            選擇表t_book中的bookName,price的資訊,建立檢視v2
CREATE VIEW v3(b,p) AS SELECT bookName,price FROM t_book;            選擇表t_book中的bookName,price的資訊,建立檢視v3,並將這兩個欄位命名為b,p
SELECT * FROM v1;            檢視檢視v1
SELECT * FROM v2;            檢視檢視v2
SELECT * FROM v3;            檢視檢視v3
CREATE VIEW v4 AS SELECT bookName,bookTypeName FROM t_book,t_booktype WHERE t_book.bookTypeId=t_booktype.id;           多表建立檢視:選擇表t_book,t_booktype,中bookTypeId=id行中的                        
                                                                                                                                                                                                                                   bookName和bookTypeName欄位建立檢視v4
CREATE VIEW v5 AS SELECT tb.bookName,tby.bookTypeName FROM t_book tb,t_booktype tby WHERE tb.bookTypeId=tby.id;            多表建立檢視:(同上)表名使用別名
SELECT * FROM v4;            檢視檢視v4
SELECT * FROM v5;            檢視檢視v5
DESC v5;            檢視檢視基本資訊
SHOW TABLE STATUS LIKE 'v5';            檢視檢視基本資訊
SHOW TABLE STATUS LIKE 't_book';            查看錶的基本資訊
SHOW CREATE VIEW v5;            檢視檢視的詳細資訊

 9、修改檢視

SELECT  * FROM v1;            檢視檢視v1
CREATE OR REPLACE VIEW v1(bookName,price) AS SELECT bookName,price FROM t_book;            建立或更改檢視v1,更改為從表t_book中選擇欄位的形式
ALTER VIEW v1 AS SELECT * FROM t_book;            修改檢視v1為從表中選擇的全部欄位

INSERT INTO v1 VALUES(NULL,'java good',120,'feng',1);            向檢視v1中插入對應的資料(向檢視插入相當於向表中插入)
UPDATE v1 SET bookName='java very good',price=200 WHERE id=5;            更新檢視id=5的資料
DELETE FROM v1 WHERE id=5;            刪除檢視中id=5的行資料

DROP VIEW IF EXISTS v4;            刪除已存在的檢視v4