共计 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 网 – 提供最优质的资源集合!