百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MYSQL语法的细致总结(附示例)
分享文章到:

MYSQL语法的细致总结(附示例)

发布时间:08/01 来源:未知 浏览: 关键词:
本篇文章给大家带来的内容是对于MYSQL语法的细致总结(附示例),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。 本篇文章给大家带来的内容是对于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数据类型

参照 :https://www.php1.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 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;
    END
    //DELIMITER ;

解释:
(1)分隔符:mysql默许“;”,“DELIMITER //”声明分隔符 ,最后“DELIMITER ;”复原分隔符
(2)参数:输入、输出、输入输出参数{IN,OUT,INOUT} 概括参照 mysql存储

  • 变量

    1. DECLARE部分变量: DECLARE var_name[,…] type [DEFAULT value]
      要给变量供给一个默许值,请包括一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。要是没有DEFAULT子句,初始值为NULL。 部分变量的作用范畴在它被声明的BEGIN … END块内

    2. 变量SET语句:SET var_name = expr [, var_name = expr]
      被参照 变量可能是子程序内声明的变量,或者是全局办事器变量

    3. 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语法的细致总结(附示例)的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板