1. 程式人生 > 其它 >MySQL基礎查詢大全

MySQL基礎查詢大全

技術標籤:資料庫mysqlsql

資料表準備

1.建立學生資訊表

CREATE TABLE IF NOT EXISTS tb_student(
	sid INT(20) NOT NULL,
	sname VARCHAR(32) NOT NULL,
	ssex VARCHAR(2) NOT NULL,
	sbirthday DATETIME,
	class VARCHAR(10),
	PRIMARY KEY (sid)
)ENGINE=INNODB CHARSET= utf8;

2.建立教師資訊表

CREATE TABLE IF NOT EXISTS tb_teacher(
	tid INT(20) NOT NULL PRIMARY KEY,
	tname VARCHAR(32) NOT NULL,
	tsex VARCHAR(2) NOT NULL,
	tbirthday DATETIME,
	profession VARCHAR(32),
	department VARCHAR(32) NOT NULL
)ENGINE=INNODB CHARSET= utf8;

3.建立課程資訊表

CREATE TABLE IF NOT EXISTS tb_course(
	cid INT(20) NOT NULL,
	cname VARCHAR(32) NOT NULL,
	tid INT(20) NOT NULL,
	FOREIGN KEY(tid) REFERENCES tb_teacher(tid),
	PRIMARY KEY (cid)
)ENGINE=INNODB CHARSET= utf8;

4.建立成績資訊表

CREATE TABLE IF NOT EXISTS tb_score(
	scid INT(20) NOT NULL,
	sid int(20) NOT NULL,
	FOREIGN KEY(sid) REFERENCES tb_student(sid),
	cid INT(20) NOT NULL,
	FOREIGN KEY(cid) REFERENCES tb_course(cid),
	PRIMARY KEY (scid),
  degree DECIMAL
)ENGINE=INNODB CHARSET= utf8;

解析:

  • AUTO_INCREMENT 定義列自增1,一般為主鍵設定

  • PRIMARY KEY 定義此列為主鍵,使用這個關鍵字被修飾的欄位:唯一和非空

  • FOREIGN KEY 外來鍵約束:使用這個關鍵字設定某主表的外來鍵

  • UNIQUE 唯一約束:使用這個關鍵字被修飾的欄位:唯一,可以在結尾使用unique(field1,field2)。

  • DEFAULT 設定預設值

  • ENGINE 設定儲存引擎

  • CHARSET 設定表編碼

  • NULL設定欄位預設為 NULL ,如果不想為 NULL 則設定為非空約束 NOT NULL

MySQL表插入資料

通用語法:

1.向指定欄位插入資料

INSERT INTO table_name (field1,field2,...fieldn) VALUES (value1,value2,...valuen);

2.向所有欄位依次插入資料。

INSERT INTO table_name VALUES(value1,value2,...);

給上述表都插入資料方便後續查詢

  • 向學生資訊表插入資料
 INSERT INTO tb_student VALUES('108','Mary','女','1977-09-01','20031');
 INSERT INTO tb_student VALUES('105','Lisa','女','1975-10-02','20031');
 INSERT INTO tb_student VALUES('107','Tom','男','1976-01-23','20032');
 INSERT INTO tb_student VALUES('101','Helen','男','1976-02-20','20033');
 INSERT INTO tb_student VALUES('109','Rose','女','1975-02-10','20031');
 INSERT INTO tb_student VALUES('103','Jack','男','1974-06-03','20033');
  • 向教師資訊表新增資料
INSERT INTO tb_teacher VALUES('201','Ann','男','1958-13-06','副教授','計算機系');
INSERT INTO tb_teacher VALUES('202','Jane','女','1959-05-07','講師','網路工程系');
INSERT INTO tb_teacher VALUES('203','Angela','男','1962-03-05','助教','計算機系');
INSERT INTO tb_teacher VALUES('204','Rebecca','女','1967-08-04','助教','網路工程系');
  • 向課程資訊表新增資料
INSERT INTO tb_course VALUES('3100','計算機導論','203');
INSERT INTO tb_course VALUES('3200','作業系統','201');
INSERT INTO tb_course VALUES('3300','C語言','202');
INSERT INTO tb_course VALUES('3400','計算機網路','204');
  • 向成績資訊表新增資料
INSERT INTO tb_score VALUES(1,'103','3200','86');
INSERT INTO tb_score VALUES(2,'105','3200','75');
INSERT INTO tb_score VALUES(3,'106','3300','68');
INSERT INTO tb_score VALUES(4,'103','3100','92');
INSERT INTO tb_score VALUES(5,'102','3300','88');
INSERT INTO tb_score VALUES(6,'104','3400','76');
INSERT INTO tb_score VALUES(7,'106','3400','64');
INSERT INTO tb_score VALUES(8,'105','3300','91');
INSERT INTO tb_score VALUES(9,'101','3200','78');
INSERT INTO tb_score VALUES(10,'103','3300','85');
INSERT INTO tb_score VALUES(11,'105','3200','79');
INSERT INTO tb_score VALUES(12,'106','3100','81');

MySQL 更新資料

UPDATE table_name SET field1=new_value1, field2=new_value2
WHERE clause
  • 可以使用 WHERE 新增指定條件

  • 可以同時更新一個或多個欄位

MySQL 查詢資料

通用語法:

SELECT column_name,column_name,... FROM table_name WHRER clause
  • WHERE 可以指定查詢條件

  • 可以使用 * 查詢所有欄位

  • 查詢多個表使用 , 將表分開

查詢開始!!!!!!

Example1

查詢所有學生資料資訊

SELECT * FROM tb_student;
SELECT sid,sname,ssex,sbirthday,class FROM tb_student;

結果如下:

Example2

查詢20031班的學生資訊

SELECT sid,sname,ssex,sbirthday,class FROM tb_student WHERE class='20031';

結果如下:

Example3

查詢tb_score表成績在70-80之間的資訊

  • 使用 BETWEEN AND 關鍵字
SELECT scid,sid,cid,degree FROM tb_score WHERE degree BETWEEN 70 AND 80;
  • 使用 >=<=
SELECT scid,sid,cid,degree FROM tb_score WHERE degree >= 70 AND degree <= 80;

結果如下:

Example4

查詢tb_score表成績為64,88或92的記錄

SELECT scid,sid,cid,degree FROM tb_score WHERE degree in(64,88,92);

結果如下:

Example5

查詢tb_teacher表為’助教’或’女性’老師資訊

使用 or 關鍵字

SELECT tid,tname,tsex,tbirthday,profession,department FROM tb_teacher WHERE profession='助教' or tsex='女';

結果如下:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-HAbujngz-1607949945880)(https://cdn.jsdelivr.net/gh/yunshanmister/picture/imgs{HQ7IJSQW(8`UFV[2J7C}W0.png)]

Example6

查詢tb_score表按成績升序資訊

MySQL使用ORDER BY關鍵字和 ASCDESC關鍵字升序/降序查詢

SELECT scid,sid,cid,degree FROM tb_score ORDER BY degree ASC;

結果如下:

Example7

查詢教書所有職稱【使用distinct去重複】

SELECT DISTINCT profession FROM tb_teacher;

結果如下:

Example8

查詢20031班學生人數

SELECT COUNT(*) FROM tb_student WHERE class='20031'

結果如下:

Example9

查詢每門課的平均成績【使用 avg() 函式查平均值, AS 關鍵字起別名 】

SELECT sid,cid,AVG(degree) AS 平均成績  FROM tb_score GROUP BY cid

結果如下:

Example10

查詢tb_score表中的最高分的學生學號和課程號

  • 使用 limit 關鍵字
SELECT sid,cid FROM tb_score ORDER BY degree DESC LIMIT 0,1;
  • 使用子查詢
SELECT sid,cid FROM tb_score WHERE degree=(SELECT MAX(degree) FROM tb_score);

結果如下:

Example11

查詢名字中帶有字母a的學生

  1. LIKE 關鍵字
  • % 表示零個到多個的任意字串

  • _ 表示任意單個字元

  • [] 表示自己可以指定範圍。如 [A-X] 或者 [ABCDEFGHIJK]中的字元。

  • [^] 不是不包含

SELECT * FROM tb_student WHERE sname LIKE '%a%';
  1. INSTR(str,substr) 函式
SELECT * FROM tb_student WHERE INSTR(sname,'a');
  1. LOCATE(substr,str) 函式
SELECT * FROM tb_student WHERE LOCATE('a',sname);
  1. POSITION(substr IN str)函式
SELECT * FROM tb_student WHERE POSITION('a' IN sname);

結果如下:

Example12

查詢tb_core表中至少有4名學生選修的並以且課程id包含4的課程的平均分數。

SELECT AVG(degree) FROM tb_score WHERE cid LIKE '%3%' AND cid IN (SELECT cid FROM tb_score GROUP BY cid HAVING COUNT(*)>3);

簡化語句後

SELECT AVG(degree) FROM tb_score WHERE cid LIKE '%3%' AND GROUP BY cid HAVING COUNT(*)>3);

總結如下

上述查詢出現的關鍵字及語法總結

  • SELECT 表示的是查詢結果

  • DISTINCT 去除重複

  • * 萬用字元查詢所有

  • FROM 查詢後面接要查詢的表

  • WHERE 查詢要限制的條件

  • ORDER BY ASC DESC 排序查詢

  • LIMIT 分組查詢

  • GROUP BY 分組

  • HAVING 過濾條件

  • LIKE INSTR(str,substr) LOCATE(substr,str) POSITION(substr IN str) 模糊查詢其中

  • AS 起別名

綜合使用順序SELECT DISTINCT * FROM table_name WHERE '限制條件' GROUP BY '分組依據' HAVING '過濾條件' ORDER BY LIMIT 'X,Y'