Jadual Kandungan
用户管理
数据库
创建表:
数据
条件控制
子查询
MySQL函数
JOIN详解
UNION规则
视图
索引
单列索引:
组合索引
全文索引
删除索引
查看索引
存储
语法
游标
事务
导入导出
性能优化
查询实例
Rumah pangkalan data tutorial mysql MYSQL语法的详细总结(附示例)

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

Feb 15, 2019 pm 02:30 PM
sintaks 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
Salin selepas log masuk

设置及更改用户密码:

#以下为三种更改方式
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
Salin selepas log masuk

删除用户:

Delete FROM user Where User='test' and Host='localhost';
flush privileges;
# 删除用户的数据库
drop database testDB; 
# 删除账户及权限
drop user 用户名@ localhost;
Salin selepas log masuk

授权:

GRANT INSERT,DELETE,UPDATE,SELECT ON databasename.tablename TO 'username'
@'host'
flush privileges
Salin selepas log masuk

说明:

(1)privileges-用户的操作权限,如SELECT , INSERT , UPDATE <br/>(2)databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示, 如.* <br/>(3)新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效

查看权限:

show grants for root@localhost;
Salin selepas log masuk
  • 去除权限:

# GRANT的反操作,去除权限
 REVOKE SELECT ON db_name.* TO name;
Salin selepas log masuk

登录远程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
Salin selepas log masuk

MYSQL数据类型

参考:http://www.php.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高效不支持全文检索
Salin selepas log masuk
  • 设置表编码: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; <br/>临时表:客户端与服务器会话中使用处理特定事务,节省空间、私密性

  • 查看数据库中可用表: 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`;
Salin selepas log masuk
  • 表别名: 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;
Salin selepas log masuk

数据

  • 插入数据: <br/>INSERT INTO tb_name(id,name,score) VALUES(NULL,’张三’,140),(NULL,’张四’,178),(NULL,’张五’,134); <br/>注意: 插入多条数据直接后面加上逗号

  • 插入检索出来的数据: <br/>INSERT INTO tb_name(name,score) SELECT name score FROM tb_name2;

  • 更新数据 <br/>UPDATE tb_name SET score=180 WHERE id=2; <br/>UPDATE tablename SET columnName=NewValue[WHERE condition]

  • 删除数据: <br/>DELETE FROM tb_name WHERE id=3;

条件控制

where语句: <br/>

SELECT * FROM tb_name WHERE id=3;
Salin selepas log masuk

Group by <br/>Group by解释 <br/>GROUP BY 与WHERE联合查询: <br/>select 列a,聚合函数 from 表名 where 过滤条件 group by 列a having 过滤条件 <br/>当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选

HAVING语句: <br/>

SELECT * FROM tb_name GROUP BY score HAVING count(*)>2;
Salin selepas log masuk

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
Salin selepas log masuk
  • 多条件查询:

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 &#39;%huxx&#39;
Salin selepas log masuk
  • 分组查询:分组查询可以按照指定的列进行分组 <br/>SELECT COUNT() FROM tb_name GROUP BY score HAVING COUNT()>1 ; <br/>注意:以上条件用HAVING,GROUP BY 按列排序

  • 排序: ORDER BY column_name DESC|ASC; //按数据的降序和升序排列

 SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;
Salin selepas log masuk

MySQL常见运算符

正则表达式: <br/>SELECT * FROM tb_name WHERE REGEXP ‘^[A-D]’; <br/>解释:使用“^”匹配名字的开始,找出以A-D为开头的name <br/>* 正则表达式实践: <br/>参考博客: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);
Salin selepas log masuk
  • 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;
Salin selepas log masuk
  • exists型子查询:(把外层查询结果拿到内层,看内层的查询是否成立)

#查询哪些栏目下有商品,栏目表category,商品表goods
select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id);
Salin selepas log masuk

MySQL函数

  • distinct : 去重 Select player_id,distinct(task_id) from task; <br/>distinct去除重复样本(多个字段)

  • select distinct Student.Sno,Sname from Student (另一种方式)

  • 字符串连接——CONCAT() <br/>SELECT CONCAT(name,”==>”,score) FRON tb_name;

  • 数学函数: <br/>AVG、SUM、MAX、MIN、COUNT

  • 文本处理函数: <br/>TRIM、LOCATE、UPPER、LOWER、SUNSTRING

  • 运算符: <br/>+、-、*、\

  • 时间函数: <br/>DATE()、CURTIME()、DAY()、YEAR()、NOW()…..

JOIN详解

join 用于多表中字段之间的联系

... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona
Salin selepas log masuk

JOIN 按照功能大致分为如下三类: <br/>* INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录 <br/>* LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录 <br/>* RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录

注意:mysql不支持Full join,不过可以通过UNION 关键字来合并 LEFT JOIN 与 RIGHT JOIN来模拟FULL join. <br/>具体参考博客Mysql Join语法解析与性能分析

UNION规则

UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中:在多个 SELECT 语句中,对应的列应该具有相同的字段属性

SELECT column,... FROM table1  UNION [ALL] SELECT column,... FROM table2 ...
Salin selepas log masuk
  • UNION 与 UNION ALL 的区别: <br/>使用 UNION 时,MySQL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MySQL 会把所有的记录返回,且效率高于 UNION <br/>具体参考博客MySQL UNION 与 UNION ALL 语法与用法

视图

视图是从一个或多个表中导出来的表,是一种虚拟存在的表。数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。 <br/>背景:安全性、查询性能提高 <br/> - 使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件 <br/> - 增加数据的安全性,通过视图,用户只能查询和修改指定的数据。 <br/> - 节省空间,内容是总是一致的话,那么我们不需要维护视图的内容,维护好真实表的内容,就可以保证视图的完整性了 <br/> - 提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响 <br/>工作机制:当调用视图的时候,才会执行视图中的sql,进行取数据操作。视图的内容没有存储,而是在视图被引用的时候才派生出数据。这样不会占用空间,由于是即时引用,视图的内容总是与真实表的内容是一致的。更新视图可以更新真实表。 <br/>视图与数据库:

视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。 <br/>视图的建立和删除只影响视图本身,不影响对应的基本表 <br/>某些视图是可更新的。也就是说,可以在诸如UPDATE、DELETE或INSERT等语句中使用它们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。更具体地讲,如果视图包含下述结构中的任何一种,那么它就是不可更新的。 <br/>视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。

索引

  • 10W条数据,检索nickname=’css’ <br/>

    • 一般:SELECT * FROM award WHERE nickname = ‘css’ :mysql需要扫描全表及扫描10W条数据找这条数据

    • 索引: 在nickname上建立索引,那么mysql只需要扫描一行数据

  • 索引分为单列索引(主键索引,唯索引,普通索引)和组合索引 <br/>

    • 单列索引:一个索引只包含一个列,一个表可以有多个单列索引.

    • 组合索引:一个组合索引包含两个或两个以上的列

单列索引:

  • 普通索引,这个是最基本的索引 <br/>ALTER table SC ADD INDEX Sno_Index(Sno); //注意符号,不是单引号 <br/>注意: 字段:CHAR,VARCHAR,类型,索引:length可以小于字段的实际长度,如果是BLOB和TEXT类型就必须指定长度

  • 唯一索引: 唯一索引要求所有的类的值是唯一的,这一点和主键索引一样.但是它允许有空值 <br/>create UNIQUE INDEX sname ON Student(Sname);

  • 主键索引,不允许有空值: <br/>规则:int优于varchar,一般在建表的时候创建,最好是与表的其他字段不相关的列或者是业务不相关的列.一般会设为 int 而且是 AUTO_INCREMENT自增类型的

组合索引

一个表中含有多个单列索引不代表是组合索引,通俗一点讲 组合索引是:包含多个字段但是只有索引名称 <br/>创建:CREATE INDEX Tno_Tname_index ON Teacher(Tno,Tname);

全文索引

文本字段上(text)如果建立的是普通索引,那么只有对文本的字段内容前面的字符进行索引,其字符大小根据索引建立索引时申明的大小来规定. <br/>建立: ALTER TABLE tablename ADD FULLTEXT(column1, column2)

删除索引

DORP INDEX IndexName ON TableName

查看索引

show index from tblname;

这块参考博客细说mysql索引 ,写的很详细。 <br/>索引原理:索引原理

存储

一组为了完成特定功能的SQL语句集,经过编译后存储在数据库中。当希望在不同应用程序或者平台上执行相同函数时,或封装特定功能时,存储过程是非常有用的。存储过程类似一个可编程函数。MySQL 中,单个 Store Procedure(SP) 不是原子操作,要使整个存储过程成为一个原子操作的办法是:在存储过程主体开始部分。 <br/>注意:非事务导致存储过程没有原子性即过程有的成功有的失败,变为事务增加原子性,即使执行过程出错,出错前的操作将不会真正执行。http://www.cnblogs.com/fnlingnzb-learner/p/6861376.html

优点: <br/>1. 执行速度快:存储过程会预编译,查询优化器会对其优化。 <br/>2. 可多次调用及修改 <br/>3. 功能灵活:可用流程控制语句编写,完成复杂运算 <br/>4. 安全:设置存储过程权限,保证数据安全 <br/>5. 减少流量:调用存储过程时,网络只传输此调用语句即可

语法

  • 结构: <br/>CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …] 过程体

DELIMITER //
  CREATE PROCEDURE myproc(OUT s int)
    BEGIN
      SELECT COUNT(*) INTO s FROM students;
    END
    //DELIMITER ;
Salin selepas log masuk

解释: <br/>(1)分隔符:mysql默认“;”,“DELIMITER //”声明分隔符 ,最后“DELIMITER ;”还原分隔符 <br/>(2)参数:输入、输出、输入输出参数{IN,OUT,INOUT} 具体参考mysql存储

  • 变量 <br/>

    1. DECLARE局部变量: DECLARE var_name[,…] type [DEFAULT value] <br/>要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。 局部变量的作用范围在它被声明的BEGIN … END块内

    2. 变量SET语句:SET var_name = expr [, var_name = expr] <br/>被参考变量可能是子程序内声明的变量,或者是全局服务器变量

    3. SELECT … INTO 语句:SELECT col_name[,…] INTO var_name[,…] table_expr <br/>把选定的列直接存储到变量

  • 基本常用函数:参考博客:Mysql存储过程 <br/>

字符串类:默认第一个字符下标为1,即参数position必须大于等于1 <br/> <br/>

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个空格
Salin selepas log masuk

<span style="font-family: "Microsoft Yahei", "Hiragino Sans GB", Helvetica, "Helvetica Neue", 微软雅黑, Tahoma, Arial, sans-serif;">数学类 </span><br/>

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(&#39;DEF&#39;)返回4142143 
也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19 
LEAST (number , number2 [,..]) //求最小值 
MOD (numerator ,denominator ) //求余 
POWER (number ,power ) //求指数 
RAND([seed]) //随机数 
ROUND (number [,decimals ]) //四舍五入,decimals为小数位数] 
注:返回类型并非均为整数,如下文: 
SIGN (number2 ) //
Salin selepas log masuk

日期时间类 <br/>

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) //开平方
Salin selepas log masuk

游标

定义:游动的标识,相对于普通的一次性查询给出所有结果;游标的作用就是对数据样本中一条一条分析处理,像个指针。 <br/>使用: <br/>1. 声明: declare 游标名 cursor for select_statement; <br/>2. 打开: open 游标名 <br/>3. 取值: fetch 游标名 into var1,var2[,…] <br/>4. 关闭:close 游标名;

事务

Mysql事务主要用于处理操作量大,复杂度高的数据。例如:当你删除一样东西时,你得把它自身及所依赖的东西都要删除。所有这些操作行为形成一个事务。 <br/>注意: <br/> - MYSQL中:只有Innodb数据库引擎的数据库或表才支持事务 <br/> - 事务处理用来维护数据库完整性即保证批量SQL语句全部执行或者全部不执行 <br/> - 事务用来管理insert,update,delete语句 <br/> 事务满足4个条件: <br/> 1. 事务的原子性:要么成功,要么失败 <br/> 2. 稳定性: 有非法数据,事务撤回 <br/> 3. 隔离性: 事务独立运行 <br/> 4. 可靠性:当发生奔溃,InnoDB数据表驱动会利用日志文件重构修改 <br/> 参考博客事务

导入导出

  • 导出整个数据库: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;
Salin selepas log masuk

性能优化

查询实例

数据库题:学生表,选课表,课程表 设教学数据库中有三个基本表: <br/>学生表 Student(Sno,Sname,Age,Sex),其属性表示学生的学号、姓名、年龄和性别; <br/>选课表 SC(Sno,Cno,score),其属性表示学生的学号、所学课程的课程号和成绩; <br/>课程表 Course(Cno,Cname,Tho),其属性表示课程号、课程名称和任课教师姓名; <br/>教师表 Teacher (Tno,Tname),其属性表示教师号、教师名称; <br/>下面的题目都是针对上述三个基本表操作的。 <br/>*导入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 (&#39;001&#39;,&#39;陈一&#39;,25,&#39;nan&#39;);  
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES (&#39;002&#39;,&#39;郭二&#39;,20,&#39;nv&#39;);  
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES (&#39;003&#39;,&#39;张三&#39;,25,&#39;nv&#39;);  
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES (&#39;004&#39;,&#39;李四&#39;,22,&#39;nan&#39;);  
INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES (&#39;005&#39;,&#39;王五&#39;,23,&#39;nan&#39;);  
INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;001&#39;,&#39;张老师&#39;);  
INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;002&#39;,&#39;王老师&#39;);  
INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;003&#39;,&#39;钱老师&#39;);  
INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;004&#39;,&#39;刘老师&#39;);  
INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;005&#39;,&#39;胡老师&#39;);  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;001&#39;,&#39;语文&#39;,&#39;张老师&#39;);  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;002&#39;,&#39;数学&#39;,&#39;王老师&#39;);  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;003&#39;,&#39;英语&#39;,&#39;钱老师&#39;);  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;004&#39;,&#39;物理&#39;,&#39;刘老师&#39;);  
INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;005&#39;,&#39;政治&#39;,&#39;胡老师&#39;);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;001&#39;,50);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;002&#39;,60);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;003&#39;,70);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;004&#39;,80);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;005&#39;,90);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;001&#39;,90);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;002&#39;,80);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;003&#39;,70);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;004&#39;,60);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;005&#39;,50);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;001&#39;,81);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;002&#39;,82);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;003&#39;,83);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;004&#39;,84);  
INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;005&#39;,85);
Salin selepas log masuk
  • 写出检索全是女同学选修的课程的课程号的SQL语句。

select Cno  from Student,SC where Student.Sno=SC.Sno AND Student.Sex=&#39;nv&#39;;
Salin selepas log masuk
  • 写出下列插入操作的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;
Salin selepas log masuk
  • 试写出下列删除操作的SQL语句:从SC表中把王老师的女学生选课元组删去。

delete from SC where Sno in (select Sno from Student where Sex=&#39;nv&#39;) AND Cno in (select Cno from Course where Tno=&#39;王老师&#39;);
Salin selepas log masuk
  • 查询“001”课程比“002”课程成绩高的所有学生的学号;

select a.Sno from (select Sno,score FROM SC where Cno=&#39;001&#39;) AS a ,(select Sno,score FROM SC where Cno=&#39;002&#39;) AS  b  WHERE a.score > b.score;//当两个表存在相同列名时,用tablename.columnname指定列
Salin selepas log masuk
  • 查询所有同学的学号、姓名、选课数、总成绩;

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;
Salin selepas log masuk


Atas ialah kandungan terperinci MYSQL语法的详细总结(附示例). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kurangkan penggunaan memori MySQL di Docker Kurangkan penggunaan memori MySQL di Docker Mar 04, 2025 pm 03:52 PM

Artikel ini meneroka mengoptimumkan penggunaan memori MySQL di Docker. Ia membincangkan teknik pemantauan (statistik Docker, skema prestasi, alat luaran) dan strategi konfigurasi. Ini termasuk had memori docker, swapping, dan cgroups, bersama -sama

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Mar 04, 2025 pm 04:01 PM

Artikel ini menangani ralat "tidak dapat membuka perpustakaan kongsi" MySQL. Isu ini berpunca daripada ketidakupayaan MySQL untuk mencari perpustakaan bersama yang diperlukan (.so/.dll fail). Penyelesaian melibatkan mengesahkan pemasangan perpustakaan melalui pakej sistem m

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Mar 19, 2025 pm 03:51 PM

Artikel ini membincangkan menggunakan pernyataan jadual Alter MySQL untuk mengubah suai jadual, termasuk menambah/menjatuhkan lajur, menamakan semula jadual/lajur, dan menukar jenis data lajur.

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Mar 04, 2025 pm 03:54 PM

Artikel ini membandingkan memasang MySQL pada Linux secara langsung berbanding menggunakan bekas podman, dengan/tanpa phpmyadmin. Ia memperincikan langkah pemasangan untuk setiap kaedah, menekankan kelebihan Podman secara berasingan, mudah alih, dan kebolehulangan, tetapi juga

Apa itu SQLite? Gambaran Keseluruhan Komprehensif Apa itu SQLite? Gambaran Keseluruhan Komprehensif Mar 04, 2025 pm 03:55 PM

Artikel ini memberikan gambaran menyeluruh tentang SQLite, pangkalan data relasi tanpa server tanpa mandiri. Ia memperincikan kelebihan SQLITE (kesederhanaan, mudah alih, kemudahan penggunaan) dan kekurangan (batasan konkurensi, cabaran skalabiliti). C

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Mar 04, 2025 pm 03:49 PM

Panduan ini menunjukkan pemasangan dan menguruskan pelbagai versi MySQL pada macOS menggunakan homebrew. Ia menekankan menggunakan homebrew untuk mengasingkan pemasangan, mencegah konflik. Pemasangan Butiran Artikel, Permulaan/Perhentian Perkhidmatan, dan PRA Terbaik

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Mar 18, 2025 pm 12:01 PM

Artikel membincangkan mengkonfigurasi penyulitan SSL/TLS untuk MySQL, termasuk penjanaan sijil dan pengesahan. Isu utama menggunakan implikasi keselamatan sijil yang ditandatangani sendiri. [Kira-kira aksara: 159]

Apakah beberapa alat GUI MySQL yang popular (mis., MySQL Workbench, phpmyadmin)? Apakah beberapa alat GUI MySQL yang popular (mis., MySQL Workbench, phpmyadmin)? Mar 21, 2025 pm 06:28 PM

Artikel membincangkan alat MySQL GUI yang popular seperti MySQL Workbench dan PHPMyAdmin, membandingkan ciri dan kesesuaian mereka untuk pemula dan pengguna maju. [159 aksara]

See all articles