用户治理
新建用户及暗码: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数据范例
参考:http://www.ki4.cn/mysql-tutorials-415213.html
数据库
检察数据库: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(*)>2;
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()>1 ;
注重:以上前提用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 >=2; #以上查询效果,我们只需名字就能够了,所以再取一次名字 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 ONStudent
(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; END //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语法的细致总结(附示例)的细致内容,更多请关注ki4网别的相干文章!