MySQL資料庫 sql語句及其含義
阿新 • • 發佈:2018-12-17
本文主要記錄常用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