19mysql

mysql
启动/关闭MySQL服务
计算机–>管理–>服务和应用程序–>服务

可以通过在对应服务上右键进行服务器的开启/关闭操作。
通过命令行启动
cmd> net start mysql
停止服务命令
cmd> net stop mysql
mysql登录和退出
mysql -u root -p
输入密码

mysql>exit;
mysql>quit;
mysql>\q;
修改mysql提示符
链接客户端时通过参数指定
mysql>mysql -u root -p --prompt 提示符
连接上客户端后,通过prompt 提示符
mysql>prompt 提示符
修改方式建议
为了方便我们在平时的使用,有效的给我们提示信息。 
建议参考Linux系统的提示符方式命名,即:用户名@主机名+当前所在位置。 
在MySQL中可以通过参数来获取提示符信息,下面列表中列出了常用的四个信息,方便我们等下修改MySQL提示符。
参数 描述
\D 完整的日期
\d 当前数据库
\h 服务器名称
\u 当前用户
mysql> PROMPT \u@\h \d >
root@localhost (none) >CREATE DATABASE testdb;
root@localhost (none) >USE testdb;
root@localhost testdb >
mysql常用版本信息命令
显示当前服务器版本
SELECT VERSION();
显示当前日期时间
SELECT NOW();
显示当前用户
SELECT USER();
mysql语句的规范
关键字与函数名称全部大写
数据库名称、表名称、字段名称全部小写
sql语句必须以分号结尾
mysql创建数据库语法
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
最简单的形式:
CREATE DATABASE 数据库名;
查看当前服务器下数据库列表
SHOW {DATABASES | SCHEMAS}
SHOW CREATE DATABASE schema_name;
修改数据库 alter
ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name
删除数据库
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
数据类型
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
数值类型
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
浮点数值
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
类型 大小
(字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
创建数据表
https://blog.csdn.net/qq_36159351/article/details/77414947?locationNum=1&fps=1
打开数据库
USE数据库名称;
SELECT DATABASE();
以下为创建MySQL数据表的SQL通用语法:
CREATE TABLE table_name (column_name column_type, …);
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,

)
eg:

查看数据表
SHOW TABLES [FROM db_name][LIKE ‘pattern’ | WHERE expr]
SHOW COLUMNS FROM tb_name
DESC tb_name
插入数据
INSERT [INTO] tb_name[(col_name, …)] VALUE(val, …)
如果仅想给指定字段赋值,则需要加中括号内容。
查找数据
SELECT expr,… FROM tb_name;
SELECT * FROM tb_name;
空值与非空
NULL, 字段值可以为空
NOT NULL, 字段值禁止为空

自增主键
自动编号,且必须与主键组合使用
默认情况下,起始值为1,每次的增量为1
主键
主键约束
每张数据表只能存在一个主键
主键保证记录的唯一性
主键自动为NOT NULL
唯一约束
唯一约束
唯一约束可以保证记录的唯一性
唯一约束的字段可以为控制(NULL)
每张数据表可以存在多个唯一约束
默认值
当插入记录是,如果没有明确为字段赋值,则自动赋予默认值。
约束
约束保证数据的完整性和一致性
约束分为表级约束和列级约束
约束类型包括
NOT NULL(非空约束)
PRIMARY KEY(主键约束)
UNIQUE KEY(唯一约束)
DEFAULT(默认约束)
FOREIGN KEY(外键约束)
外键约束
保持数据一致性,完整性。
实现一对一或一对多关系。
外键约束的要求
父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
数据表的存储引擎只能为InnoDB。
外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
编辑数据表的默认存储引擎
MySQL配置文件
default-storage-engine=INNODB

外键约束的参照操作
CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
RESTRICT:拒绝对父表的删除或更新操作
NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同

先插入父表记录,再插入子表记录。
表级约束与列级约束
对一个数据列建立的约束,称为列级约束。
对多个数据列建立的约束,称为表级约束。
列级约束既可以在列声明时声明,又可以在列定义后声明。
表级约束只能在列定义后声明。
修改数据表
添加单列
ALTER TABLE tb_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]
添加多列(新增列仅能追加在最后一列之后)
ALTER TABLE tb_name ADD [COLUMN] (col_name column_definition,…)
删除列
ALTER TABLE tb_name DROP [COLUMN] col_name

添加主键约束
ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name, …)

添加唯一约束
ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name, …)

添加外键约束
ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,…) REFERENCES provice (id);
添加/删除默认约束
ALTER TABLE tb_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
colin-mysql
创建用户
create user tt identified by ‘123456’;

alter user tt identified by ‘abc123’; todo

drop user tt;
查询用户
select user from mysql.user;
授予用户权限
grant select on 0830colin.* to test;

revoke select on 0830colin.* from test;

创建表
#约束
create table table_name (
id int primary key, #主键约束,不允许重复
name varchar(10) unique, #唯一约束
gender enum(‘男’,‘女’),
age int default 18 #默认约束
);
插入数据
insert into table_name values(10, ‘denglong’, ‘男’, NULL);
修改表结构
alter table test
add column aa int;

alter table test
modify column aa varchar(10);

alter table test
drop column hh;

#修改列名MySQL:
alter table test
change aa hh int;

#查询
#select 列名 from 表名
#select 列名,列名,列名,, from 表名

select snum,name,sage from test;
select * from test;
#增加

#insert into 表名 values(值)

insert into test values(1,‘白白’,‘男’,20);
insert into test values(2,‘白小白’,‘女’,12);
insert into test values(3,‘小白白’,‘男’,20);
insert into test values(6,null,‘女’,22);
insert into test(snum,name,sage) values(7,‘tt’,34);

#修改

update test set ssex = ‘女’, name = ‘hehe’;

#删除

delete from test;

#使用数据库
use test2;
#创建表
create table test (
snum int primary key, #主键约束
name varchar(10) unique, #唯一约束
ssex enum(‘男’,‘女’),
sage int default 18 #默认约束
);

#查询表
select * from test;

#展示表
desc test;

更新表
#更新表 增加字段
alter table test add column aa int;
#更新表 修改字段
alter table test modify column aa varchar(10);
#更新表 修改列名
alter table test change aa hh int;
#更新表 删除字段
alter table test drop column hh;

增加
#插入数据
insert into test values(1, ‘小智’, ‘男’, 18);
insert into test values(2, ‘智小智’, ‘女’, 12);
insert into test values(3, ‘小小智’, ‘男’, 20);
insert into test values(6, null, ‘女’, 22);
insert into test(snum, name, sage) values(7, ‘tt’, 34);

删除
#删除表数据
delete from test;

修改
#修改
update test set ssex = ‘女’;

条件
#where条件
select * from test;

select * from test where snum = 1;
select * from test where snum != 1;
select * from test where snum <> 1;

select * from test where snum >=2 and snum <= 5;
select * from test where snum >=2 or snum <= 5;
select * from test where snum between 2 and 5;
select * from test where snum between 5 and 2; – 这是一个错误的示范
/多行注释/

select * from test where snum in (1, 5, 7);

delete from test where snum = 3;

update test set ssex = ‘男’ where name = ‘智小智’;

模糊查找
#模糊查找
select * from test where name like ‘小%’;
select * from test where name like ‘%小’;
select * from test where name like ‘%小%’;

select * from test where name like ‘%小_’;

函数
#函数 limit
select * from test limit 2;
select * from test limit 1, 2;

#排序函数
select * from test order by sage asc;
select * from test order by sage desc, snum asc;

#聚合函数
#总条数
#count() or count(1) https://blog.csdn.net/u012099869/article/details/52861479
select count(
) from test;
select count(1) from test;
select count(name) from test; – 由于null不参与计算, 所以在使用某一指定字段判断总条数的时候,要明确是否要对null字段进行计数

#分组函数
select ssex, count(ssex) from test group by ssex order by count(ssex) asc;

select * from test where name = null; – 这种方式查询不到
select * from test where name <=> null;

select * from test where name is null;
select * from test where name is not null;

#ifnull(要判断的值,如果为空返回的值)
select ifnull(0,9);
select ifnull(null, ‘hehe’);

select * from test where ifnull(name, ‘0’) = ‘0’;

select ssex, count(ssex) from test where name is not null group by ssex having count(ssex) order by count(ssex);

sql 语句执行顺序 https://www.cnblogs.com/Jessy/p/3527091.html

关键字执行顺序
查询中用到的关键词主要包含六个,并且他们的顺序依次为 
select–from–where–group by–having–order by 
 
其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序 
与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行 
from–where–group by–having–select–order by,

数据库三范式
#数据库表的三范式
#https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html
#https://www.2cto.com/database/201705/639704.html

#使用homework数据库
use homework;

#显示homework数据库中包含的表
show tables;

多表联接查询
#多表查询

#内联
select * from student s inner join sc on s.snum = sc.snum;
select * from student s, sc where s.snum = sc.snum;
#select count() from student s inner join sc on s.snum = sc.snum;
#select count(
) from student s, sc where s.snum = sc.snum;

#左联
select * from student s left join sc on s.snum = sc.snum;

#右联
select * from student s right join sc on s.snum = sc.snum;

#笛卡尔积
select * from student, sc;
视图
由一张表或者多张表导出的一张虚拟表
select * from student s
inner join sc on s.snum = sc.snum;

select s.*, cnum, score from student s
inner join sc on s.snum = sc.snum;

create view myview as
(select s.*, cnum, score from student s
inner join sc on s.snum = sc.snum);

视图的数据基于多个表,对视图操作会影响多个表,所以是不允许的。
函数
删除函数
drop function if exists myfunction;
@d 会话变量
@@e 全局变量
delimiter //
create function myfunction(a int, b int)
returns int #返回值 varchar(10)
begin
declare c int default 0; #局部变量
set c = a+b; #赋值
#set @c = a + b; #@c是会话变量,不需要声明,不需要定义类型
#return @c;
return c;
end
//
delimiter ;
select myadd(2,3);

select @c;

函数中不能使用复杂的sql语句
存储过程
数据库中的子程序,用来封装复杂的程序,以供外部调用的接口。
drop procedure if exists myproc;
delimiter //
create procedure myproc(in a int, out b int) #通过参数来获取返回值
begin
set b = a;
select * from student;
end
//
delimiter ;

#call myproc;
call myproc(1, @c);

select @c;

条件语句 if

if then elseif else end if;

delimiter //
create function myshow(num int)
returns varchar(10)
begin
declare b varchar(10) default ‘’;
if(num > 0) then set b = ‘大于0’;
elseif (num = 0) then set b = ‘等于0’;
else set b = ‘小于0’;
end if;
return b;
end
//
delimiter ;

select myshow(2);
条件语句 case
drop function if exists myshow;

case when then end case;

delimiter //
create function myshow(num int)
returns varchar(10)
begin
declare b varchar(10) default ‘’;
case when(num > 0) then set b = ‘大于0’;
when(num = 0) then set b = ‘等于0’;
else set b = ‘小于0’;
end case;
return b;
end
//
delimiter ;

循环语句
drop function if exists myshow;

while do end while;

delimiter //
create function myshow(num int)
returns int
begin
declare snum int default 0;
declare i int default 0;
while i <= num do
set snum = snum + i;
set i = i + 1;
end while;
return snum;
end
//
delimiter ;
select myshow(10);

跳出循环体
drop function if exists myshow;

while do end while;

delimiter //
create function myshow(num int)
returns int
begin
declare snum int default 0;
declare i int default 0;
OUT_LABEL : BEGIN
while i <= num do
set snum = snum + i;
set i = i + 1;
if (i = num) then leave OUT_LABEL;
end if;
end while;

END OUT_LABEL;
return snum;

end
//
delimiter ;
select myshow(10);
触发器
是一种特殊的存储过程,当指定的事件发生时,系统自动调用。
#删除
drop trigger if exists mydelete;
delimiter //
create trigger mydelete
after delete #执行的操作
on test1 #表
for each row
begin
delete from test2 where snum = old.snum; #影响谁
end
//

delimiter ;

CREATE TABLE test3 (
snum int(11) NOT NULL,
name varchar(10) DEFAULT NULL,
ssex enum(‘男’,‘女’) DEFAULT NULL,
sage int(11) DEFAULT ‘18’,
PRIMARY KEY (snum),
UNIQUE KEY name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 select * from test1;

#插入
drop trigger if exists myinsert;
delimiter //
create trigger myinsert
after insert #执行的操作
on test1 #表
for each row
begin
insert into test2 values(new.snum, ‘新增’, ‘男’, 18);
end
//

delimiter ;
#修改
delimiter //
create trigger myupdate
after update #执行的操作
on test1 #表
for each row
begin
update test2 set snum = new.Snum where snum = old.snum;

end
//

delimiter ;

update test1 set snum = 9 where snum = 8;
事务

A:atomiciy原子性

#一个事务必须保证其中的操作要么全部执行,要么全部回滚,不可能存在只执行了一部分这种情况出现。
#C:consistency一致性
#数据必须保证从一种一致性的状态转换为另一种一致性状态;比如上一个事务中执行了第二步时系统崩溃了,数据也不会出现bill的账户少了100块,但是tim的账户没变的情况。要么维持原状(全部回滚),要么bill少了100块同时tim多了100块,只有这两种一致性状态的
#I:isolation隔离性
#在一个事务未执行完毕时,通常会保证其他事务无法看到这个事务的执行结果
#D:durability持久性
#事务一旦commit,则数据就会保存下来,即使提交完之后系统崩溃,数据也不会丢失。
drop table account;

CREATE TABLE account (
id BIGINT (11) NOT NULL AUTO_INCREMENT,
p_name VARCHAR (4),
p_money DECIMAL (10, 2) NOT NULL DEFAULT 0,
PRIMARY KEY (id)
) ;
INSERT INTO account (id, p_name, p_money) VALUES (‘1’, ‘tim’, ‘200’);
INSERT INTO account (id, p_name, p_money) VALUES (‘2’, ‘bill’, ‘200’);

START TRANSACTION;
SELECT p_money FROM account WHERE p_name=“tim”;
UPDATE account SET p_money=p_money-100 WHERE p_name=“tim”;
UPDATE account SET p_money=p_money+100 WHERE p_name=“bill”;
COMMIT;
#rollback;
select * from account;

#索引
mysql联合索引: https://www.cnblogs.com/softidea/p/5977860.html
#锁
课后自己学习

#练习题
#查询01课程学生的成绩
#select 嵌套 (select语句可以看做表|条件|列)
#查询学生的个人信息以及01号课程的成绩
select * from student;
select * from sc where cnum = ‘01’;

#使用内联方式获取上面两个select语句的交集
select a.*, score from (select * from student) a inner join (select * from sc where cnum = ‘01’) b on a.snum = b.snum;

select * from student inner join sc on student.snum = sc.snum and cnum = ‘01’;

– 列 select为列的方式
select *,
(select score from sc where cnum = ‘01’ and sc.snum = student.snum) sc01
from student;

#1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
select *,
(select score from sc where cnum = ‘01’ and sc.snum = student.snum) sc01,
(select score from sc where cnum = ‘02’ and sc.snum = student.snum) sc02
from student
where student.sc01 > student.sc02; #由于关键字执行顺序的问题,sc01|sc02在where中并不能被识别

– 列 select为条件的方式
select *,
(select score from sc where cnum = ‘01’ and sc.snum = student.snum) sc01,
(select score from sc where cnum = ‘02’ and sc.snum = student.snum) sc02
from student
where (select score from sc where cnum = ‘01’ and sc.snum = student.snum) > (select score from sc where cnum = ‘02’ and sc.snum = student.snum);

select * from (
select *,
(select score from sc where cnum = ‘01’ and sc.snum = student.snum) sc01,
(select score from sc where cnum = ‘02’ and sc.snum = student.snum) sc02
from student) a
where sc01 > sc02;

select * from (select * from student) a
inner join (select * from sc where cnum = ‘01’) b on a.snum = b.snum;

select a.*, score from (select * from student) a
inner join (select * from sc where cnum = ‘01’) b on a.snum = b.snum;

select * from student
inner join sc on student.snum = sc.snum and cnum = ‘01’;
练习题
使用函数,完成斐波那契数列问题。
数据
#创建表和数据
#问题及描述:
– 1.学生表

Student(Snum,Sname,Sage,Ssex) --Snum 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

– 2.课程表

Course(Cnum,Cname,Tnum) --Cnum --课程编号,Cname 课程名称,Tnum 教师编号

– 3.教师表

Teacher(Tnum,Tname) --Tnum 教师编号,Tname 教师姓名

– 4.成绩表
#SC(Snum,Cnum,score) --Snum 学生编号,Cnum 课程编号,score 分数
– 创建测试数据

create table Student(Snum varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10));
insert into Student values(‘01’ , N’赵雷’ , ‘1990-01-01’ , N’男’);
insert into Student values(‘02’ , N’钱电’ , ‘1990-12-21’ , N’男’);
insert into Student values(‘03’ , N’孙风’ , ‘1990-05-20’ , N’男’);
insert into Student values(‘04’ , N’李云’ , ‘1990-08-06’ , N’男’);
insert into Student values(‘05’ , N’周梅’ , ‘1991-12-01’ , N’女’);
insert into Student values(‘06’ , N’吴兰’ , ‘1992-03-01’ , N’女’);
insert into Student values(‘07’ , N’郑竹’ , ‘1989-07-01’ , N’女’);
insert into Student values(‘08’ , N’王菊’ , ‘1990-01-20’ , N’女’);
create table Course(Cnum varchar(10),Cname nvarchar(10),Tnum varchar(10));
insert into Course values(‘01’ , N’语文’ , ‘02’);
insert into Course values(‘02’ , N’数学’ , ‘01’);
insert into Course values(‘03’ , N’英语’ , ‘03’);
create table Teacher(Tnum varchar(10),Tname nvarchar(10));
insert into Teacher values(‘01’ , N’张三’);
insert into Teacher values(‘02’ , N’李四’);
insert into Teacher values(‘03’ , N’王五’);
create table SC(Snum varchar(10),Cnum varchar(10),score decimal(18,1));
insert into SC values(‘01’ , ‘01’ , 80);
insert into SC values(‘01’ , ‘02’ , 90);
insert into SC values(‘01’ , ‘03’ , 99);
insert into SC values(‘02’ , ‘01’ , 70);
insert into SC values(‘02’ , ‘02’ , 60);
insert into SC values(‘02’ , ‘03’ , 80);
insert into SC values(‘03’ , ‘01’ , 80);
insert into SC values(‘03’ , ‘02’ , 80);
insert into SC values(‘03’ , ‘03’ , 80);
insert into SC values(‘04’ , ‘01’ , 50);
insert into SC values(‘04’ , ‘02’ , 30);
insert into SC values(‘04’ , ‘03’ , 20);
insert into SC values(‘05’ , ‘01’ , 76);
insert into SC values(‘05’ , ‘02’ , 87);
insert into SC values(‘06’ , ‘01’ , 31);
insert into SC values(‘06’ , ‘03’ , 34);
insert into SC values(‘07’ , ‘02’ , 89);
insert into SC values(‘07’ , ‘03’ , 98);
insert into SC values(‘09’ , ‘03’ , 98);
作业
#1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
#1.1、查询同时存在"01"课程和"02"课程的情况

#1.2、存在"01"课程但可能不存在"02"课程的情况(不存在时显示为null)(以下存在相同内容时不再解释)

#2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数
#2.1、查询同时存在"01"课程和"02"课程的情况

#2.2、查询同时存在"01"课程和"02"课程的情况和不存在"01"课程但存在"02"课程的情况

#3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

#4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩
#4.1、查询在sc表存在成绩的学生信息的SQL语句。

#4.2、查询在sc表中不存在成绩的学生信息的SQL语句。

#5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
#5.1、查询所有有成绩的SQL。

#5.2、查询所有(包括有成绩和无成绩)的SQL。
#6、查询"李"姓老师的数量

#7、查询学过"张三"老师授课的同学的信息

#8、查询没学过"张三"老师授课的同学的信息

#9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

#10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息

#11、查询没有学全所有课程的同学的信息

#12、查询至少有一门课与学号为"01"的同学所学相同的同学的信息

#13、查询和"01"号的同学学习的课程完全相同的其他同学的信息 XX

#14、查询没学过"张三"老师讲授的任一门课程的学生姓名

#15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

#16、检索"01"课程分数小于60,按分数降序排列的学生信息

#17、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

#18、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
#及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

#19、按各科成绩进行排序,并显示排名

#20、查询学生的总成绩并进行排名
#20.1 查询学生的总成绩

#20.2 查询学生的总成绩并进行排名,分总分重复时保留名次空缺和不保留名次空缺两种。

#21、查询不同老师所教不同课程平均分从高到低显示

#22、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩

#23、查询学生平均成绩及其名次

#24查询学生的平均成绩并进行排名.

#25、查询各科成绩前三名的记录
#25.1 分数重复时保留名次空缺

#25.2 分数重复时不保留名次空缺,合并名次

#26、查询每门课程被选修的学生数

#27、查询出只有两门课程的全部学生的学号和姓名

#28、查询男生、女生人数

#29、查询名字中含有"风"字的学生信息

#30、查询同名同性学生名单,并统计同名人数

#31、查询1990年出生的学生名单(注:Student表中Sage列的类型是datetime)

#32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

#33、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩

#34、查询课程名称为"数学",且分数低于60的学生姓名和分数

#35、查询所有学生的课程及分数情况;

#36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;

#37、查询不及格的课程

#38、查询课程编号为01且课程成绩在80分以上的学生的学号和姓名;

#39、求每门课程的学生人数

#40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩

#41、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

#42、查询每门功成绩最好的前两名

#43、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

#44、检索至少选修两门课程的学生学号

#45、查询选修了全部课程的学生信息

#46、查询各学生的年龄
#46.1 只按照年份来算

#46.2 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一

#47、查询本周过生日的学生

#48、查询下周过生日的学生

#49、查询本月过生日的学生

#50、查询下月过生日的学生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值