共計 13731 個字符,預計需要花費 35 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下 MYSQL 基礎語法示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
用戶管理
新建用戶及密碼:foo 為名,123 為密碼,locahost 為固定地址登錄
# 以下為兩種創建方式
CREATE USER foo@localhost IDENTIFIED BY‘123’insert into mysql.user(Host,User,Password) values(localhost , test ,password( 1234));
#只要更改了用戶及密碼
flush privileges
設置及更改用戶密碼:
# 以下為三種更改方式
SET PASSWORD FOR username @ host = PASSWORD(newpassword)
#若果是當前登錄用戶
SET PASSWORD = PASSWORD(newpassword)
update mysql.user set password=password(newpassword) where User= username and Host= host
#只要更改了用戶及密碼
flush privileges
刪除用戶:
Delete FROM user Where User= test and Host= localhost
flush privileges;
# 刪除用戶的數據庫
drop database testDB;
# 刪除賬戶及權限
drop user 用戶名 @ localhost;
授權:
GRANT INSERT,DELETE,UPDATE,SELECT ON databasename.tablename TO username
@ host
flush privileges
說明:
(1)privileges- 用戶的操作權限, 如 SELECT , INSERT , UPDATE
(2)databasename – 數據庫名,tablename- 表名, 如果要授予該用戶對所有數據庫和表的相應操作權限則可用表示, 如.*
(3)新設置用戶或更改密碼后需用 flush privileges 刷新 MySQL 的系統權限相關表,否則會出現拒絕訪問,還有一種方法,就是重新啟動 mysql 服務器,來使新設置生效
查看權限:
show grants for root@localhost;
去除權限:
# GRANT 的反操作,去除權限
REVOKE SELECT ON db_name.* TO name;
登錄遠程 MySQL(ubuntu): mysql -h 遠程 ip -P 遠程端口 -u 用戶 - p 密碼
# 需遠程 ip 和端口:10.10.101.111:30061 遠程 mysql 的用戶及密碼
mysql -h 10.10.101.111 -P 30061 -u root -p 123456
MYSQL 數據類型
數據庫
查看數據庫:SHOW DATABASES;
創建數據庫:CREATE DATABASES db_name;
使用數據庫:USE db_name;
刪除數據庫:DROP DATABASE db_name;
設置數據庫編碼:set names utf8;
表創建表:
CREATE TABLE table_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(60) NOT NULL,
score TINYINT UNSIGNED NOT NULL DEFAULT 0,PRIMARY KEY(id)
)ENGINE=InnoDB;// 設置表的存儲引擎,一般常用 InnoDB 和 MyISAM;InnoDB 可靠,支持事務;MyISAM 高效不支持全文檢索
設置表編碼:create table name (…) ENGINE=InnoDB DEFAULT CHARSET=utf8;
復制表:CREATE TABLE tb_name2 SELECT * FROM tb_name
部分復制:CREATE TABLE tb_names SELECT id,name FROM tb_namr;
創建臨時表:CREATE TEMPORARY TABLE tb_name;
臨時表:客戶端與服務器會話中使用處理特定事務,節省空間、私密性
查看數據庫中可用表:SHOW TABLES;
查看表結構:DESCRIBE tb_name; 或者 SHOW COLUMNS FROM tb_name;
刪除表:DROP [TEMPORARY] TABLE [IF EXISTS] tb_name[,tb_name2…….];
DROP TABLE IF EXISTS `db_school`,`Student`;
表別名:SELECT a.title,a.content,u.username FROM article AS a, user AS u where a.aid=1 and a.uid=u.uid
表重命名:RENAME TABLE name_old TO name_new; 或 ALTER TABLE name_old RENAME name_new;
更改表結構:ALTER TABLE tb_name ADD[CHANGE、RENAME、DROP]
ALTER TABLE tb_name ADD COLUMN address varchar(80) NOT NULL;
ALTER TABLE tb_name DROP address;
ALTER TABLE tb_name CHANGE score score SMALLINT(4) NOT NULL;
數據
插入數據:
INSERT INTO tb_name(id,name,score) VALUES(NULL,’張三’,140),(NULL,’張四’,178),(NULL,’張五’,134);
注意: 插入多條數據直接后面加上逗號
插入檢索出來的數據:
INSERT INTO tb_name(name,score) SELECT name score FROM tb_name2;
更新數據
UPDATE tb_name SET score=180 WHERE id=2;
UPDATE tablename SET columnName=NewValue[WHERE condition]
刪除數據:
DELETE FROM tb_name WHERE id=3;
條件控制
where 語句:
SELECT * FROM tb_name WHERE id=3;
Group by
Group by 解釋
GROUP BY 與 WHERE 聯合查詢:
select 列 a, 聚合函數 from 表名 where 過濾條件 group by 列 a having 過濾條件
當結合在一起時,where 在前,group by 在后。即先對 select xx from xx 的記錄集合用 where 進行篩選,然后再使用 group by 對篩選后的結果進行分組 使用 having 字句對分組后的結果進行篩選
HAVING 語句:
SELECT * FROM tb_name GROUP BY score HAVING count(*)
Having 用法
* 以上三者實踐:
轉載:mysql group by 用法解析(詳細)
相關條件控制符:
=、、、、IN(1,2,3......)、BETWEEN a AND b、NOT
AND、OR
Like()用法中 % 為匹配任意、_ 匹配一個字符(可以是漢字)IS NULL 空值檢測 IS NOT NULL
IN NOT IN //
limit [offset,] N #如果給定兩個參數,第一個參數指定第一個返回記錄行的偏移量,第二個參數指定返回記錄行的最大數目。初始記錄行的偏移量是 0(而不是 1) : SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15
多條件查詢:
SELECT * FROM tb_name
WHERE id=1003 AND price =10
# WHERE id=1003 OR price =10
# WHERE id IN(1002,1003)
# WHERE id NOT IN(1002,1003)
# WHERE name like %huxx
分組查詢:分組查詢可以按照指定的列進行分組
SELECT COUNT() FROM tb_name GROUP BY score HAVING COUNT()
注意:以上條件用 HAVING,GROUP BY 按列排序
排序: ORDER BY column_name DESC|ASC; // 按數據的降序和升序排列
SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;
MySQL 常見運算符
正則表達式:
SELECT * FROM tb_name WHERE REGEXP‘^[A-D]’;
解釋:使用“^”匹配名字的開始,找出以 A - D 為開頭的 name
* 正則表達式實踐:
參考博客:MYSQL 使用正則表達式過濾數據
子查詢
where 型子查詢:(把內層查詢結果當作外層查詢的比較條件)
# 不用 order by 來查詢最新的商品
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
#取出每個欄目下最新的產品(goods_id 唯一)
select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id);
from 型子查詢:(把內層的查詢結果供外層再次查詢)
# 先查出哪些同學掛科兩門以上
select name,count(*) as gk from stu where score 60 having gk
#以上查詢結果,我們只要名字就可以了,所以再取一次名字
select name from (select name,count(*) as gk from stu having gk =2) as t;
#找出這些同學了,那么再計算他們的平均分
select name,avg(score) from stu where name in (select name from (select name,count(*) as gk from stu having gk =2) as t) group by name;
exists 型子查詢:(把外層查詢結果拿到內層,看內層的查詢是否成立)
# 查詢哪些欄目下有商品,欄目表 category, 商品表 goods
select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id);
MySQL 函數
distinct : 去重 Select player_id,distinct(task_id) from task;
distinct 去除重復樣本(多個字段)
select distinct Student.Sno,Sname from Student(另一種方式)
字符串連接——CONCAT()
SELECT CONCAT(name,”==”,score) FRON tb_name;
數學函數:
AVG、SUM、MAX、MIN、COUNT
文本處理函數:
TRIM、LOCATE、UPPER、LOWER、SUNSTRING
運算符:
+、-、*、\
時間函數:
DATE()、CURTIME()、DAY()、YEAR()、NOW()…..
JOIN 詳解
join 用于多表中字段之間的聯系
... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona
JOIN 按照功能大致分為如下三類:
* INNER JOIN(內連接, 或等值連接):取得兩個表中存在連接匹配關系的記錄
* LEFT JOIN(左連接):取得左表(table1)完全記錄,即是右表(table2)并無對應匹配記錄
* RIGHT JOIN(右連接):與 LEFT JOIN 相反,取得右表(table2)完全記錄,即是左表(table1)并無匹配對應記錄
注意:mysql 不支持 Full join, 不過可以通過 UNION 關鍵字來合并 LEFT JOIN 與 RIGHT JOIN 來模擬 FULL join.
具體參考博客 Mysql Join 語法解析與性能分析
UNION 規則
UNION 用于把來自多個 SELECT 語句的結果組合到一個結果集合中:在多個 SELECT 語句中,對應的列應該具有相同的字段屬性
SELECT column,... FROM table1 UNION [ALL] SELECT column,... FROM table2 ...
UNION 與 UNION ALL 的區別:
使用 UNION 時,MySQL 會把結果集中重復的記錄刪掉,而使用 UNION ALL,MySQL 會把所有的記錄返回,且效率高于 UNION
具體參考博客 MySQL UNION 與 UNION ALL 語法與用法
視圖
視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。數據庫中只存放了視圖的定義,而沒有存放視圖中的數據,這些數據存放在原來的表中。
背景:安全性、查詢性能提高
– 使操作簡單化,可以對經常使用的查詢定義一個視圖,使用戶不必為同樣的查詢操作指定條件
– 增加數據的安全性,通過視圖,用戶只能查詢和修改指定的數據。
– 節省空間,內容是總是一致的話,那么我們不需要維護視圖的內容,維護好真實表的內容,就可以保證視圖的完整性了
– 提高表的邏輯獨立性,視圖可以屏蔽原有表結構變化帶來的影響
工作機制:當調用視圖的時候,才會執行視圖中的 sql,進行取數據操作。視圖的內容沒有存儲,而是在視圖被引用的時候才派生出數據。這樣不會占用空間,由于是即時引用,視圖的內容總是與真實表的內容是一致的。更新視圖可以更新真實表。
視圖與數據庫:
視圖中的數據依賴于原來表中的數據,一旦表中數據發生改變,顯示在視圖中的數據也會發生改變。
視圖的建立和刪除只影響視圖本身,不影響對應的基本表
某些視圖是可更新的。也就是說,可以在諸如 UPDATE、DELETE 或 INSERT 等語句中使用它們,以更新基表的內容。對于可更新的視圖,在視圖中的行和基表中的行之間必須具有一對一的關系。還有一些特定的其他結構,這類結構會使得視圖不可更新。更具體地講,如果視圖包含下述結構中的任何一種,那么它就是不可更新的。
視圖中雖然可以更新數據,但是有很多的限制。一般情況下,最好將視圖作為查詢數據的虛擬表,而不要通過視圖更新數據。因為,使用視圖更新數據時,如果沒有全面考慮在視圖中更新數據的限制,就可能會造成數據更新失敗。
索引
10W 條數據,檢索 nickname=’css’
一般:SELECT * FROM award WHERE nickname =‘css’ :mysql 需要掃描全表及掃描 10W 條數據找這條數據
索引:在 nickname 上建立索引, 那么 mysql 只需要掃描一行數據
索引分為單列索引 (主鍵索引, 唯索引, 普通索引) 和組合索引
單列索引: 一個索引只包含一個列, 一個表可以有多個單列索引.
組合索引: 一個組合索引包含兩個或兩個以上的列
單列索引:
普通索引, 這個是最基本的索引
ALTER table SC ADD INDEX Sno_Index(Sno); // 注意符號,不是單引號
注意: 字段:CHAR,VARCHAR, 類型, 索引:length 可以小于字段的實際長度, 如果是 BLOB 和 TEXT 類型就必須指定長度
唯一索引: 唯一索引要求所有的類的值是唯一的, 這一點和主鍵索引一樣. 但是它允許有空值
create UNIQUE INDEX sname ON Student(Sname);
主鍵索引, 不允許有空值:
規則:int 優于 varchar, 一般在建表的時候創建, 最好是與表的其他字段不相關的列或者是業務不相關的列. 一般會設為 int 而且是 AUTO_INCREMENT 自增類型的
組合索引
一個表中含有多個單列索引不代表是組合索引, 通俗一點講 組合索引是: 包含多個字段但是只有索引名稱
創建:CREATE INDEX Tno_Tname_index ON Teacher(Tno,Tname);
全文索引
文本字段上 (text) 如果建立的是普通索引, 那么只有對文本的字段內容前面的字符進行索引, 其字符大小根據索引建立索引時申明的大小來規定.
建立:ALTER TABLE tablename ADD FULLTEXT(column1, column2)
刪除索引
DORP INDEX IndexName ON TableName
查看索引
show index from tblname;
這塊參考博客細說 mysql 索引,寫的很詳細。
索引原理:索引原理
存儲
一組為了完成特定功能的 SQL 語句集,經過編譯后存儲在數據庫中。當希望在不同應用程序或者平臺上執行相同函數時,或封裝特定功能時,存儲過程是非常有用的。存儲過程類似一個可編程函數。MySQL 中,單個 Store Procedure(SP) 不是原子操作,要使整個存儲過程成為一個原子操作的辦法是:在存儲過程主體開始部分。
注意:非事務導致存儲過程沒有原子性即過程有的成功有的失敗,變為事務增加原子性,即使執行過程出錯,出錯前的操作將不會真正執行。http://www.cnblogs.com/fnlingnzb-learner/p/6861376.html
優點:
1. 執行速度快:存儲過程會預編譯,查詢優化器會對其優化。
2. 可多次調用及修改
3. 功能靈活:可用流程控制語句編寫,完成復雜運算
4. 安全:設置存儲過程權限,保證數據安全
5. 減少流量:調用存儲過程時,網絡只傳輸此調用語句即可
語法
結構:
CREATE PROCEDURE 過程名([[IN|OUT|INOUT] 參數名 數據類型[,[IN|OUT|INOUT] 參數名 數據類型…]]) [特性 …] 過程體
DELIMITER //
CREATE PROCEDURE myproc(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM students;
//DELIMITER ;
解釋:
(1)分隔符:mysql 默認“;”,“DELIMITER //”聲明分隔符,最后“DELIMITER ;”還原分隔符
(2)參數:輸入、輸出、輸入輸出參數{IN,OUT,INOUT} 具體參考 mysql 存儲
變量
DECLARE 局部變量:DECLARE var_name[,…] type [DEFAULT value]
要給變量提供一個默認值,請包含一個 DEFAULT 子句。值可以被指定為一個表達式,不需要為一個常數。如果沒有 DEFAULT 子句,初始值為 NULL。局部變量的作用范圍在它被聲明的 BEGIN … END 塊內
變量 SET 語句:SET var_name = expr [, var_name = expr]
被參考變量可能是子程序內聲明的變量,或者是全局服務器變量
SELECT … INTO 語句:SELECT col_name[,…] INTO var_name[,…] table_expr
把選定的列直接存儲到變量
基本常用函數:參考博客:Mysql 存儲過程
字符串類:默認第一個字符下標為 1,即參數 position 必須大于等于 1
CHARSET(str) // 返回字串字符集
CONCAT (string2 [,...]) // 連接字串
INSTR (string ,substring) // 返回 substring 首次在 string 中出現的位置, 不存在返回 0
LCASE (string2) // 轉換成小寫
LEFT (string2 ,length) // 從 string2 中的左邊起取 length 個字符
LENGTH (string) //string 長度
LOAD_FILE (file_name) // 從文件讀取內容
LOCATE (substring , string [,start_position] ) 同 INSTR, 但可指定開始位置
LPAD (string2 ,length ,pad) // 重復用 pad 加在 string 開頭, 直到字串長度為 length
LTRIM (string2) // 去除前端空格
REPEAT (string2 ,count) // 重復 count 次
REPLACE (str ,search_str ,replace_str) // 在 str 中用 replace_str 替換 search_str
RPAD (string2 ,length ,pad) // 在 str 后用 pad 補充, 直到長度為 length
RTRIM (string2) // 去除后端空格
STRCMP (string1 ,string2) // 逐字符比較兩字串大小,
SUBSTRING (str , position [,length]) // 從 str 的 position 開始, 取 length 個字符,
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) // 去除指定位置的指定字符
UCASE (string2) // 轉換成大寫
RIGHT(string2,length) // 取 string2 最后 length 個字符
SPACE(count) // 生成 count 個空格
數學類
ABS (number2) // 絕對值
BIN (decimal_number) // 十進制轉二進制
CEILING (number2) // 向上取整
CONV(number2,from_base,to_base) // 進制轉換
FLOOR (number2) // 向下取整
FORMAT (number,decimal_places) // 保留小數位數
HEX (DecimalNumber) // 轉十六進制
注:HEX()中可傳入字符串,則返回其 ASC-11 碼,如 HEX( DEF)返回 4142143
也可以傳入十進制整數,返回其十六進制編碼,如 HEX(25)返回 19
LEAST (number , number2 [,..]) // 求最小值
MOD (numerator ,denominator) // 求余
POWER (number ,power) // 求指數
RAND([seed]) // 隨機數
ROUND (number [,decimals]) // 四舍五入,decimals 為小數位數]
注:返回類型并非均為整數,如下文:SIGN (number2) //
日期時間類
ADDTIME (date2 ,time_interval) // 將 time_interval 加到 date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ) // 轉換時區
CURRENT_DATE ( ) // 當前日期
CURRENT_TIME ( ) // 當前時間
CURRENT_TIMESTAMP ( ) // 當前時間戳
DATE (datetime) // 返回 datetime 的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type) // 在 date2 中加上日期或時間
DATE_FORMAT (datetime ,FormatCodes) // 使用 formatcodes 格式顯示 datetime
DATE_SUB (date2 , INTERVAL d_value d_type) // 在 date2 上減去一個時間
DATEDIFF (date1 ,date2) // 兩個日期差
DAY (date) // 返回日期的天
DAYNAME (date) // 英文星期
DAYOFWEEK (date) // 星期(1-7) ,1 為星期天
DAYOFYEAR (date) // 一年中的第幾天
EXTRACT (interval_name FROM date) // 從 date 中提取日期的指定部分
MAKEDATE (year ,day) // 給出年及年中的第幾天, 生成日期串
MAKETIME (hour ,minute ,second) // 生成時間串
MONTHNAME (date) // 英文月份名
NOW ( ) // 當前時間
SEC_TO_TIME (seconds) // 秒數轉成時間
STR_TO_DATE (string ,format) // 字串轉成時間, 以 format 格式顯示
TIMEDIFF (datetime1 ,datetime2) // 兩個時間差
TIME_TO_SEC (time) // 時間轉秒數]
WEEK (date_time [,start_of_week]) // 第幾周
YEAR (datetime) // 年份
DAYOFMONTH(datetime) // 月的第幾天
HOUR(datetime) // 小時
LAST_DAY(date) //date 的月的最后日期
MICROSECOND(datetime) // 微秒
MONTH(datetime) // 月
MINUTE(datetime) // 分返回符號, 正負或 0
SQRT(number2) // 開平方
游標
定義:游動的標識,相對于普通的一次性查詢給出所有結果;游標的作用就是對數據樣本中一條一條分析處理,像個指針。
使用:
1. 聲明:declare 游標名 cursor for select_statement;
2. 打開:open 游標名
3. 取值:fetch 游標名 into var1,var2[,…]
4. 關閉:close 游標名;
事務
Mysql 事務主要用于處理操作量大,復雜度高的數據。例如:當你刪除一樣東西時,你得把它自身及所依賴的東西都要刪除。所有這些操作行為形成一個事務。
注意:
– MYSQL 中:只有 Innodb 數據庫引擎的數據庫或表才支持事務
– 事務處理用來維護數據庫完整性即保證批量 SQL 語句全部執行或者全部不執行
– 事務用來管理 insert,update,delete 語句
事務滿足 4 個條件:
1. 事務的原子性:要么成功,要么失敗
2. 穩定性:有非法數據,事務撤回
3. 隔離性:事務獨立運行
4. 可靠性:當發生奔潰,InnoDB 數據表驅動會利用日志文件重構修改
參考博客事務
導入導出
導出整個數據庫:mysqldump -u 用戶名 -p 數據庫名 導出的文件名
導出一個表:mysqldump -u 用戶名 -p 數據庫名 表名 導出的文件名
導出一個數據結構:mysqldump -u dbuser -p -d –add-drop-table dbname d:/dbname_db.sql (-d 沒有數據 –add-drop-table 在每個 create 語句之前增加一個 drop table)
導入數據庫:
use 數據庫;
source d:/dbname.sql;
性能優化查詢實例
數據庫題:學生表,選課表,課程表 設教學數據庫中有三個基本表:
學生表 Student(Sno,Sname,Age,Sex),其屬性表示學生的學號、姓名、年齡和性別;
選課表 SC(Sno,Cno,score),其屬性表示學生的學號、所學課程的課程號和成績;
課程表 Course(Cno,Cname,Tho),其屬性表示課程號、課程名稱和任課教師姓名;
教師表 Teacher (Tno,Tname),其屬性表示教師號、教師名稱;
下面的題目都是針對上述三個基本表操作的。
* 導入 sql 文件:source course.sql; sql 文件編碼格式:無 BOM 的 UTF-8
drop database IF EXISTS db_school;
CREATE database db_school;
use db_school;
DROP TABLE IF EXISTS `db_school`.`Student`;
create table Student
Sno varchar(20),
Sname varchar(50),
Age smallint,
Sex varchar(5),
primary key (Sno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `db_school`.`Course`;
create table Course
Cno varchar(20),
Cname varchar(50),
Tno varchar(20),
primary key (Cno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `db_school`.`SC`;
create table SC
Sno varchar(20),
Cno varchar(20),
score int,
primary key (Sno,Cno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `db_school`.`Teacher`;
create table Teacher
Tno varchar(20),
Tname varchar(50),
primary key (Tno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ( 001 , 陳一 ,25, nan
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ( 002 , 郭二 ,20, nv
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ( 003 , 張三 ,25, nv
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ( 004 , 李四 ,22, nan
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES ( 005 , 王五 ,23, nan
INSERT INTO `Teacher`(Tno,Tname) VALUES ( 001 , 張老師
INSERT INTO `Teacher`(Tno,Tname) VALUES ( 002 , 王老師
INSERT INTO `Teacher`(Tno,Tname) VALUES ( 003 , 錢老師
INSERT INTO `Teacher`(Tno,Tname) VALUES ( 004 , 劉老師
INSERT INTO `Teacher`(Tno,Tname) VALUES ( 005 , 胡老師
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ( 001 , 語文 , 張老師
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ( 002 , 數學 , 王老師
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ( 003 , 英語 , 錢老師
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ( 004 , 物理 , 劉老師
INSERT INTO `Course`(Cno,Cname,Tno) VALUES ( 005 , 政治 , 胡老師
INSERT INTO `SC`(Sno,Cno,score) VALUES (001 , 001 ,50);
INSERT INTO `SC`(Sno,Cno,score) VALUES (001 , 002 ,60);
INSERT INTO `SC`(Sno,Cno,score) VALUES (001 , 003 ,70);
INSERT INTO `SC`(Sno,Cno,score) VALUES (001 , 004 ,80);
INSERT INTO `SC`(Sno,Cno,score) VALUES (001 , 005 ,90);
INSERT INTO `SC`(Sno,Cno,score) VALUES (002 , 001 ,90);
INSERT INTO `SC`(Sno,Cno,score) VALUES (002 , 002 ,80);
INSERT INTO `SC`(Sno,Cno,score) VALUES (002 , 003 ,70);
INSERT INTO `SC`(Sno,Cno,score) VALUES (002 , 004 ,60);
INSERT INTO `SC`(Sno,Cno,score) VALUES (002 , 005 ,50);
INSERT INTO `SC`(Sno,Cno,score) VALUES (003 , 001 ,81);
INSERT INTO `SC`(Sno,Cno,score) VALUES (003 , 002 ,82);
INSERT INTO `SC`(Sno,Cno,score) VALUES (003 , 003 ,83);
INSERT INTO `SC`(Sno,Cno,score) VALUES (003 , 004 ,84);
INSERT INTO `SC`(Sno,Cno,score) VALUES (003 , 005 ,85);
寫出檢索全是女同學選修的課程的課程號的 SQL 語句。
select Cno from Student,SC where Student.Sno=SC.Sno AND Student.Sex= nv
寫出下列插入操作的 SQL 語句:把 SC 表中每門課程的平均成績插入到另一個已存在的表 SC_C(C#,CNAME,AVG_GRADE)中,其中 AVG_GRADE 為每門課程的平均成績。
# 先創建 SC_C 表,自行創建 insert into SC_C select SC.Cno,Cname,AVG(score) AS Avg_score FROM Course,SC WHERE Course.Cno=SC.Cno GROUP BY SC.Cno;
試寫出下列刪除操作的 SQL 語句:從 SC 表中把王老師的女學生選課元組刪去。
delete from SC where Sno in (select Sno from Student where Sex= nv) AND Cno in (select Cno from Course where Tno= 王老師
查詢“001”課程比“002”課程成績高的所有學生的學號;
select a.Sno from (select Sno,score FROM SC where Cno= 001) AS a ,(select Sno,score FROM SC where Cno= 002) AS b WHERE a.score b.score;// 當兩個表存在相同列名時,用 tablename.columnname 指定列
查詢所有同學的學號、姓名、選課數、總成績;
select Student.Sno,Student.Sname,count(SC.Cno),sum(SC.score) from Student left OUTER join SC on Student.Sno=SC.Sno group by Student.Sno,Student.Sname;
以上是“MYSQL 基礎語法示例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節
丸趣 TV 網 – 提供最優質的資源集合!