mysql求女生人数_mySql数据库基础

SQL 结构化查询语言。

MySQL 数据库管理系统。

SQL Server 微软的数据库管理系统。

Oracle(甲骨文) 数据管理系统。

show databases; 显示数据库管理系统中所有数据库

create database 数据库名; 创建数据库。

drop database 数据库名; 删除数据库。

use 数据库名; 使用指定数据库。

在创建数据库的过程中可以指定编码语言和校对规则。

ISO 8859-1

gbk gb2312 都是简体中文编码。

big5 繁体编码集。

utf8 比较全面的一个编码集。支持大多数编码格式。

了解if exists 以及 if not exists 从句的含义。

了解编码集 以及 校对规则的含义。

掌握使用navicat 创建数据库的方式。

3月14日

了解:

alter 修改 其实对数据库我们修改的只有编码集和校对 alert 警告

timestamp 时间戳

掌握:

show tables;

yyyy-mm-dd hh:mm:ss

yyyy 年份 mm 月份 dd 日期

hh 小时 mm 分 ss 秒

3月19日

课堂目标:

完成创建简单的 table 以及 数据的插入处理。

创建表: create table 表名(列名 类型,……);

创建表的最简单的语法。

desc 表名

查看表的结构。

select * from 表名;

查询表中的所有的内容。

在任意的数据表中,

每一个有效行都描述了一个完整的对象。

insert into 表名 values(值……);

select name from stuinfo;

select age from stuinfo;

select name,age from stuinfo;

select * from stuinfo;

4月2日

1、查询 xs_kc表中 成绩大于75的同学的 学号 和成绩?

成绩>75 条件 where 成绩>75

查询的 是不是 学号 和 成绩 满足我要求的条件。

select 学号,成绩 from xs_kc where 成绩>75

2、我想找到成绩最高的同学的学号?

select 学号 from xs_kc where 成绩= max(成绩);

本条语句的错误是因为 max函数的使用语法不对

正确的写法为:

select 学号 from xs_kc where 成绩=

(select MAX(成绩) from xs_kc)

练习:查询到成绩最低的同学的学号 ?

3、我想查询一下成绩在平均分以上的同学的学号和成绩?

条件: 成绩在平均分以上。

查询结果为:学号、成绩。

聚合函数: max() min() avg() count()(此函数在所有的管理系统的登录过程中必用!)

select 学号,成绩 from xs_kc where 成绩>

(select avg(成绩) from xs_kc)

4、我想查询一下 课程编号为 101的 分数 大于平均分的 同学的 学号和成绩

5、between and

我想查询一下成绩 大于 60 小于 70的学号和成绩.

select 学号,成绩 from xs_kc where 成绩>60 and 成绩<70

select 学号,成绩 from xs_kc where 成绩 between 60 and 70

6、SQL 查询语句的书写的规律。

结果:

条件:

7、我想查询成绩最高的同学的姓名和分数?

结果:xs表中姓名 xs_kc中的分数

中期结果 : 成绩最高的同学的学号

条件: 成绩最高

查询的结果来自几张表?

目前是两张,xs.姓名 xs_kc.分数

8、笛卡尔积 n*m

9、查询 最高成绩的同学的姓名,成绩

select 姓名,max(xs_kc.`成绩`) from xs,xs_kc where xs.学号=

(

SELECT 学号 from xs_kc where `成绩`=

(select MAX(成绩) from xs_kc)

)

10、简单的介绍count 函数的使用

count(主键名) 如果没有主键 再使用count(*) 进行查询

查询一下学号为081102 姓名为 王林的同学是否存在

select COUNT(学号) from xs WHERE

学号=‘081102‘ and 姓名=‘王林‘

2018年4月4日

1、查询XS表中各个同学的姓名、专业名、总学分。

2、查询XS表中计算机系同学的学号、姓名、和总学分,结果中各列的标题分别指定为

number、name、mark。

select 姓名 as name,学号 as number ,总学分 as mark from xs

where 专业名=‘计算机‘

条件查询 以及 列名的显示

3、查询XS表中计算机系各同学的学号,姓名和总学分,对其总学分按照以下规则进行替换,

若总学分为空 替换为 尚未选课

总学分小于50,替换为不合格

总学分在50和52之间替换为合格

大于52 替换为优秀。

列标题替换为 等级。

select 学号,姓名,

CASE

when 总学分 is NULL then ‘尚未选课‘

WHEN 总学分 <50 then ‘不合格‘

WHEN 总学分 >=50 and 总学分<=52 then ‘合格‘

WHEN 总学分 >52 then ‘优秀‘

END AS 等级

from xs

where `专业名`=‘计算机‘

4、按120 分计算成绩,显示 xs_kc表中学号为081101的学生课程信息

结果:课程信息

条件:学号为081101

SELECT 学号,课程号,FLOOR(`成绩`*1.2)

as 成绩,学分 from xs_kc

where 学号=‘081101‘

5、查询XS表中的专业名和总学分 并且消灭重复行

distinct 关键字用于消灭结果集中的重复记录。

6、求学生的总人数?

结果:人数

7、统计备注不为空的学生的数目。

结果:数目

条件:备注不为空

select COUNT(学号) as 总人数 from xs

where 备注 is not null

8、统计总学分在50分以上的同学的人数。

select COUNT(学号) as 总人数 from xs

where 总学分>50

9、查询选修101课程的学生的最高分和最低分。

min() ,max()

10、求学号081101的学生所学课程的总成绩

select SUM(成绩) as 总成绩 from xs_kc where 学号=‘081101‘

11、求选修101课程的学生的平均成绩

select AVG(成绩) from xs_kc WHERE 课程号=101

12、查询XS 表中学号为 081101的学生的情况

select * from xs where 学号=‘081101‘

13、查询XS表中总学分大于50 的情况

select * from xs where 总学分>50

14、查询表中备注为空的学生的情况

select * from xs where 备注 is null

15、查询表中专业为计算机,性别为女(0) 的同学的情况

select * from xs where 专业名=‘计算机‘ and 性别=0

16、查询XS_KC表中102 和 206 课程中大于80分的同学的记录?

select * from xs_kc where `成绩`>80 and 课程号 in (102,206)

17、查询xs表中姓“王”的学生的学号,姓名及性别

使用的关键字是“like” 和 “like”

配合使用的通配符是“%”(任意长度)“_”(一个长度)

select 学号,姓名,性别 from xs where 姓名 like ‘王%‘;

18、查询xs表中姓“王”且名字为3个字的学生的学号,姓名及性别

select 学号,姓名,性别 from xs where 姓名 like ‘王__‘;

19、查询XS表中学号倒数第二个数字为0的学生的学号姓名及专业名。

select 学号,姓名,专业名 from xs where 学号 LIKE ‘%0_‘

20、查询xs表中名字包含下划线的学生学号和姓名?

select 学号,姓名 from xs where 姓名 LIKE ‘\_‘

//这个明天搞

21、查询XS表中不在1989年出生的同学的情况

select 学号,姓名,专业名,出生时间 from xs

where 出生时间 >‘1989-12-31‘ or 出生时间

date类型的数据是可以比较大小的。

select 学号,姓名,专业名,出生时间 from xs

where 出生时间 not LIKE ‘1989%‘

like关键字可以应用于date类型的列。

22、查询表中专业名为"计算机" 、"通信工程"的学生的情况

select * from xs where 专业名=‘计算机‘ or 专业名=‘通信工程‘

select * from xs where 专业名 in (‘计算机‘,‘通信工程‘)

23、查询 XS中 学分尚不确定的学生的情况

select * from xs where

备注 LIKE ‘%待补考%‘

24、查询所有学生选过的课程名和课程号。

结果:课程名和课程号

条件:选过的。

select kc.课程名,kc.课程号 from kc where kc.课程号 in

(select DISTINCT xs_kc.课程号 from xs_kc)

select DISTINCT kc.课程名,kc.课程号 from

kc,xs_kc

where kc.`课程号`=xs_kc.`课程号`

25、查找选修了 计算机基础课程 且成绩在80分以上的学生学号 姓名 课程名(计算机基础课程) 成绩。

select xs.`学号`,xs.`姓名`,xs_kc.`成绩`,kc.`课程名`

from xs INNER JOIN xs_kc ON xs.`学号`=xs_kc.`学号`

INNER JOIN kc ON xs_kc.`课程号`=kc.`课程号` AND kc.`课程名`=‘计算机基础‘

AND xs_kc.`成绩`>80

26、查找选修了 计算机基础课程 且成绩在80分以上的学生学号 姓名 课程名(所有课程), 成绩。

select xs.`学号`,xs.`姓名`,kc.`课程名`,xs_kc.`成绩` FROM

xs INNER JOIN xs_kc on xs.`学号` in

(select DISTINCT xs_kc.`学号`from xs_kc inner JOIN kc ON xs_kc.`成绩`>80 AND

kc.`课程名`=‘计算机基础‘)

INNER JOIN kc ON xs_kc.`课程号`=kc.`课程号`

27、查找课程不同,但是成绩相同的学生的学号和课程号以及成绩。

在同一表中查询三个field。

条件:成绩相同。

如果两张表中存在一个 主外键 关系 可以 a.field = b.field

如果只是从一张表中查,那么 我们必须将这一张表看成是 两张表。

select DISTINCT a.学号,a.课程号,a.成绩 from xs_kc a,xs_kc b

where a.`课程号`!=b.`课程号` and a.`成绩`=b.`成绩`

28、查找所有学生的情况及他们选修的课程号、若学生未选修任何课程,也要包括其情况

29、查找 KC表中所有被学生选过的课的课程名

怎么才能知道是否被选过 ?

xs_kc 表中出现的课程号,才证明选过

select DISTINCT kc.`课程名` from kc , xs_kc where

kc.`课程号`=xs_kc.`课程号`

SELECT DISTINCT kc.`课程名` from kc INNER JOIN xs_kc

on kc.`课程号`=xs_kc.`课程号`

30、查找被选修了的课程的选修情况和所有开设的课程名

选修情况?

有多少人选了课程

SELECT COUNT(xs_kc.`学号`) as 人数,xs_kc.`课程号`,kc.`课程名`

from xs_kc RIGHT JOIN kc on xs_kc.`课程号`=kc.`课程号`

GROUP BY kc.`课程号`

31.查找未选修离散数学的学生的姓名、学号和专业名

SELECT xs.`学号`,xs.`姓名`,xs.`专业名` from xs

where xs.`学号` not in

(

select xs_kc.`学号` from xs_kc WHERE xs_kc.`课程号` =

(SELECT kc.`课程号` from kc where kc.`课程名`=‘离散数学‘)

)

32.查找选修了离散数学的学生学号

select xs_kc.`学号` from xs_kc WHERE xs_kc.`课程号` =

(SELECT kc.`课程号` from kc where kc.`课程名`=‘离散数学‘)

33.查找XS表中比所有计算机系的学生年龄都大的学生的学号、姓名、专业名和出生日期

SELECT xs.`出生时间` from xs where xs.`出生时间`<

(

select min(出生时间) from xs where xs.`专业名`=‘计算机‘

)

SELECT xs.`出生时间` from xs where xs.`出生时间`<

all

(

select 出生时间 from xs where xs.`专业名`=‘计算机‘

)

34.查找XS_KC表中课程号206的课程成绩不低于课程号101的最低成绩的学生的学号

select xs_kc.`学号` from xs_kc WHERE xs_kc.`成绩`>=

any

(

SELECT 成绩 from xs_kc where xs_kc.`课程号`=101

)

AND xs_kc.`课程号`=206

35.查找选修206号课程的学生姓名

select xs.`姓名` from xs INNER JOIN xs_kc

on xs.`学号`=xs_kc.`学号`

where xs_kc.`课程号`=206

36.将XS中各专业名输出

37.求XS中各专业的学生数

38.求被选修的各门课程的平均成绩和选修该课程的人数

select xs_kc.`课程号`,kc.`课程名`,COUNT(学号),AVG(成绩) from xs_kc

INNER JOIN kc ON kc.`课程号`=xs_kc.`课程号`

GROUP BY `课程号`

39.在XSCJ数据库上产生一个结果集,包括每个专业的男生人数、女生人数、总人数以及学生总人数

SELECT COUNT(学号) as 女生人数,专业名 from xs

where 性别 =0 GROUP BY 专业名;

SELECT COUNT(学号) as 男生人数,专业名 from xs

where 性别 =1 group by 专业名;

SELECT COUNT(学号) as 专业总人数, 专业名 from xs group by 专业名;

SELECT COUNT(学号) as 总人数 from xs;

40.查找平均成绩在85分以上的学生的姓名,学号和平均成绩

SELECT xs_kc.`学号`,AVG(xs_kc.`成绩`) ,xs.`姓名`

from xs_kc

INNER JOIN xs on xs_kc.`学号`=xs.`学号`

GROUP BY xs_kc.`学号` having AVG(xs_kc.`成绩`)>85

41.查找选修课程超过2门且成绩都在80分以上的学生的学号,姓名

SELECT xs_kc.`学号`,xs.`姓名`

from xs_kc

INNER JOIN xs

on xs.`学号`=xs_kc.`学号`

GROUP BY xs_kc.`学号`

HAVING MIN(成绩)>80

AND COUNT(xs_kc.`课程号`) >2

42.将通信工程专业的学生按出生日期先后排序

select * from xs where 专业名=‘通信工程‘

ORDER BY `出生时间` ASC

43.将计算机专业学生的“计算机基础”课程成绩,姓名,学号按降序排列

SELECT xs_kc.`成绩`,xs.`姓名`,xs.`学号` from xs_kc INNER JOIN xs

ON xs.`学号`=xs_kc.`学号`

INNER JOIN kc ON kc.`课程号`=xs_kc.`课程号`

where kc.`课程名`=‘计算机基础‘ AND

xs.`专业名`=‘计算机‘

ORDER BY xs_kc.`成绩` DESC

44.将计算机专业学生按其平均成绩排列

SELECT AVG(成绩) from xs_kc INNER JOIN

xs on xs.`学号`=xs_kc.`学号`

where xs.`专业名`=‘计算机‘ GROUP BY xs_kc.`学号`

ORDER BY AVG(成绩)

45.查找XS表中学号最靠前的5位学生的信息

SELECT xs.* from xs

ORDER BY 学号 LIMIT 0,5;

46.查找XS表中从第4位同学开始的5位学生的信息

查询数据库 select 所查的列名 from 表名 where 条件

插入数据库 insert into 表名 values 数值

删除数据库 delete from 表名 where 条件

修改数据库 update 表名 set 数字 where 数值

视图

create view v_xs

as SELECT xs.`学号`,xs.`姓名`,xs.`出生时间` from xs

with check option 创建视图

drop view 视图名 删除视图

create or replace view v_xs

as SELECT xs.`学号`,xs.`姓名`,xs.`出生时间` from xs

with check option 修改视图

show full tables 显示视图和表

alter view v_gameinfo as

select gameid,gamename from gameinfo 更改视图

视图是一种虚表

视图是以存储的查询

索引是什么?

理解 索引其实就是类似于目录

索引的作用都是 提高查询的效率

什么是约束?

规则 index

primary key 主键约束 不能重复,并且不能为null,表示当前行与其他行的区别。

unique 唯一约束

index

fulltext

set autocommit=0

start transaction;

select * from gameinfo

delete frim gameinfo

select * from gameinfo

rollback

set autocommit=1

show index from class

create index index_xs on xs(姓名(2) desc); 创建索引

-- index 索引的作用就是提高一下查询的效率。

show index from xs 显示索引

-- create index index_xs on xs(姓名(2) desc);

-- index 索引的作用就是提高一下查询的效率。

-- show index from xs

create unique index unique_xs on xs(姓名);

-- 确保当前列中的内容与其他行中内容不同

insert into xs(xs.`学号`,xs.`姓名`,xs.)

alter table xs

add unique index unique_xs (姓名)

删除是使用 drop 关键字。

适合创建索引的列一般情况下都出现再条件语句中。

短索引的使用。

关于事物的概念

举个例子:去银行办理一张银行卡 从进门开始 对于银行来说你这个业务就开始了。

整个办理业务的过程,就称值为“事物”。

原子性(不可分隔)

一致性(结果一致)

隔离性(对于用户来说,业务单独办理)

持续性(作用的时间是一个长的时间段)

一组语句被称作事物

事物的提交有两种方式,一个是显示提交 一个是隐式提交

关闭自动提交的指令

set autocommit=0

start transaction

savepoint p

rollback to SAVEPOINT p

-- 回滚到指定的保存点。

rollback

-- 回滚 (我反悔了)

commit

-- 提交(我确定这件事这样了)

-- set autocommit=1

数据库编程

1、我们所操作的数据,代表什么含义?

信息

信息或者说代表信息的数据必须要有容器去装载。

装载数据的容器就是常量或者变量。

2、MySQQL 种常量分为数值型,字符型,日期型,布尔型。

3、在MySQL种的赋值操作格式(全局变量):

1) set @变量名=‘xxxx‘

2) select @变量名:=‘xxxx‘

4、在局部变量中 变量的赋值可以使用select into 语句。

注意 存出过程的创建方式。可以在前文创建一个全局变量@name

set @name="王林";

select @name;

select * from xs where xs.`姓名`[email protected];

select @pai:=(@pai:=3.14)+2

create PROCEDURE p01()

BEGIN

DECLARE myname varchar(8) DEFAULT ‘长信学生‘

-- 声明一个局部变量 myname 默认值为 长信学生

set @name= myname;

end;

call p01();

5、调用系统变量的方式,某些系统变量的使用可以不用"@@"

条件控制语句

if语句

create PROCEDURE p02()

BEGIN

set @a=80;

if @a>60 then select ‘及格‘;

else select ‘不及格‘;

end if;

END

drop PROCEDURE p02

call p02();

select @a

===============================================================

create PROCEDURE p02()

BEGIN

set @a=80;

set @b=‘成绩‘;

if @a>60 then set @b=‘及格‘;

else set @b=‘不及格‘;

end if;

END

drop PROCEDURE p02

call p02();

select @b

==================================================================

create PROCEDURE p02()

BEGIN

set @a=70;

set @b=‘成绩‘;

if @a>80 then set @b=‘优秀‘;

elseif @a>60 then set @b=‘及格‘;

else set @b=‘不及格‘;

end if;

END

drop PROCEDURE p02

call p02();

select @b

===================================================================

create PROCEDURE p02()

BEGIN

case

when @a>59 then select ‘及格‘;

else select ‘不及格‘;

end case;

END

drop PROCEDURE p02

call p02();

====================================================================

drop procedure p01

create procedure p01()

BEGIN

declare sum int default 0;

declare i int default 1;

while i<10 DO

set sum=sum+i;

set i=i+1;

end while;

select sum;

END

call p01();

select @a

===================================================================

drop procedure p01

create procedure p01()

BEGIN

declare sum int default 0;

declare i int default 1;

add_sum:while true do

set sum=sum+i;

set i=i+1;

if(i=101) then

leave add_sum;

end if;

end while add_sum;

select sum;

END

call p01();

==================================================================

drop procedure p01

create procedure p01()

BEGIN

declare sum int default 0;

declare i int default 1;

add_sum:while true do

set i=i+1;

if(i=101) then

leave add_sum;

end if;

if(i%2!=0) then

iterate add_sum;

end if;

set sum=sum+i;

end while add_sum;

select sum;

END

call p01();

原文:https://www.cnblogs.com/wym-1999/p/9557236.html

你可能感兴趣的:(mysql求女生人数)