mysql根据xs表的学号列_MySQL基础1

这篇博客介绍了MySQL数据库的基本操作,包括创建、修改和删除表,设置字段约束,更改表结构,以及操作表数据的方法,如插入、修改和查询记录。内容涵盖创建数据库、查看存储引擎、数据类型修改、外键约束、数据表的重命名、字段添加和删除等。
摘要由CSDN通过智能技术生成

以下为在初次学习数据库有关知识时学习到的一些基本操作(部分)

创建表     create table tb_name;

查看存储引擎      show engines;

创建数据库     create database db_name;

可以查看choose数据库的相关信息     show create database choose;

删除数据库stu drop database stu;

显示表结构 desc tb_name;

创建部门信息表tb_dept

create table tb_dept(

id          int(11) primary key,

name       varchar(22) not null,

location  varchar(50)

);

创建一个员工信息表tb_emp,设置其字段depId为外键,引用的是tb_dept表的主键id:

非空约束   NOT NULL

创建部门信息表tb_dept,要求部门的名称不能重复

create table tb_dept(

id               int(11) primary key,

name       varchar(22),

location  varchar(50),

constraint sth UNIQUE(name)

);

或者create table tb_dept(

id               int(11) primary key,

name       varchar(22) UNIQUE,

location  varchar(50)

);

定义员工信息表tb_emp,指定员工的id为自动增长列

create table tb_emp(

id                              int(11) primary key AUTO_INCREMENT,

name                      varchar(25) NOT NULL,

deptId                     int(11)  DEFAULT  1111,

salary                      float,

constraint fk_emp_dept foreign key(deptId) references tb_dept (id)

);

创建部门信息表tb_dept,要求部门的名称不能重复

create table tb_dept(

id               int(11) primary key,

name       varchar(22),

location  varchar(50),

constraint sth UNIQUE(name)

);

默认约束定义员工信息表tb_emp,指定员工的部门编号默认为1111

create table tb_emp

id                              int(11) primary key,

name                      varchar(25) NOT NULL,

deptId                     int(11)  DEFAULT  1111,

salary                      float,

constraint fk_emp_dept foreign key(deptId) references tb_dept(id)

);

修改数据表

将数据表tb_dept改名为tb_deptment

alter table tb_dept RENAME tb_deptment;

show tables;

将数据表tb_deptment中name字段的数据类型由varchar(22)改为varchar(30)

alter table tb_deptment MODIFY name VARCHAR(30);

desc tb_department;

将数据表tb_department中的location字段名改为loc,数据类型保持不变

alter table tb_deptment CHANGE location loc varchar(50);

将数据表tb_department中的loc字段名改为location,数据类型变varchar(60)

alter table tb_deptment CHANGE loc location varchar(60);

在数据表tb_department中添加一个int类型的字段managerId(部门经理编号)

alter table tb_deptment ADD managerId int(10);

在数据表tb_department中第一列添加一个int类型的字段column2

alter table tb_deptment ADD column2 int(11) FIRST;

在数据表tb_department中name列后添加一个int类型的字段column3

alter table tb_deptment ADD column3 int(11) AFTER name;

删除数据表tb_department中的column2字段

alter table tb_deptment DROP column2;

修改数据表tb_department中的column1字段为表的第1个字段

alter table tb_deptment MODIFY column1 varchar(12) first;

修改数据表tb_department中的column1字段插入到location字段后面

alter table tb_deptment MODIFY column1 varchar(12) AFTER location;

更改表的存储引擎。将数据表tb_deptment的存储引擎改为MyISAM

alter table tb_deptment ENGINE=MyISAM;

删除没有被关联的表。删除数据表tb_dept2

drop table if exists tb_dept2;

删除被其他表关联的主表。分几种情况:

先删除与它关联的子表,再删除父表

如果要保留子表,则只需将关联的表的外键约束条件取消,然后就可删除父表

删除被数据表tb_emp(子表)关联的数据表tb_dept2(父表)

alter table tb_emp DROP FOREIGN KEY fk_emp_dept;

drop table tb_dept2;

操作表数据

1插入记录

向XSCJ数据库的表XSB中插入如下的一行:

101101王林  计算机  男  19900210  50

INSERT INTO XSB(XH, XM, XB, CSSJ, ZY, ZXF)

VALUES(‘101101’, ‘王林’, ‘男’,TO_DATE(‘19900210’,’YYYYMMDD’), ‘计算机’, 50);

使用SELECT语句查询是否添加了该行数据:

SELECT XH, XM, XB, CSSJ, ZY, ZXF

把一个表中的部分数据插入到另一个表中,但结果集中的每行数据的字段数、字段的数据类型要与被操作表完全一致

INSERT INTO table_name

derived_table

2修改记录

将XSCJ数据库的XSB表中学号为“101110”的学生备注列值改为“三好学生”,

UPDATE XSB

SET BZ=’三好学生’

WHERE XH=’101110’;

将XSB表中的所有学生的总学分都增加10。

UPDATE XSB

SET ZXF=ZXF+10;

将姓名为“罗林琳”的同学的专业改为“通信工程”,备注改为“转专业学习”,学号改为“101241”。

UPDATE XS

SET ZY='通信工程',

BZ='转专业学习',

XH='101241'

WHERE XM= '罗林琳';

查询XSB表中ZXF大于50同学的XH、XM和ZXF

SELECT XH, XM, ZXF

FROM XSB

WHERE ZXF>50;

查询XSB表中的所有列       SELECT * FROM XSB;

修改XSB表中计算机系同学的XH、XM和ZXF分别为学号、姓名和总学分

SELECT XH AS 学号,XM AS 姓名,ZXF AS 总学分

FROM XSB

WHERE ZY= '计算机';

As可以省略

对XSCJ数据库的XSB表只选择ZY和ZXF,消除结果集中的重复行。

SELECT DISTINCT ZY AS 专业,ZXF AS 总学分

FROM XSB;

对XSCJ数据库的XSB表选择ZY和ZXF,不消除结果集中的重复行。

SELECT ALL ZY AS 专业名,ZXF AS 总学分

FROM XSB;

查询XSB表中通信工程专业总学分大于等于42的同学的情况。

SELECT *

FROM XSB

WHERE ZY= '通信工程' AND ZXF>=42;

查询成绩表中期末成绩<60,总评成绩>=60分的同学

select * from xscj where zpcj>=60 and qmcj<60;

查询XSB表中姓“王”且单名的学生情况

SELECT * FROM XSB

WHERE XM LIKE '王_';

(插入出生年月类型yyyymmdd )

查询XSB表中不在1989年出生的学生情况

SELECT * FROM XSB

WHERE  CSSJ  NOT  BETWEEN  TO_DATE('19890101', 'YYYYMMDD')

AND    TO_DATE('19891231', 'YYYYMMDD');

查询CP表中库存量为“200”“300”和“500”的情况。

SELECT *

FROM CP

WHERE KCL IN (200,300,500);

或者SELECT *

FROM CP

WHERE KCL=200 OR KCL=300 OR KCL=500;

查询XSCJ数据库中总学分尚不定的学生情况(即为空值的)

SELECT *  FROM XSB

WHERE ZXF IS NULL;

子查询

在XSB表中查找1990年1月1日以前出生的学生的姓名和专业。

SELECT XM, ZY

FROM  (SELECT * FROM XSB

WHERE CSSJ

查找比所有计算机系学生年龄都大的学生。

SELECT * FROM XSB

WHERE  CSSJ

( SELECT CSSJ

FROM XSB

WHERE ZY= '计算机'

);

查找课程号206的成绩不低于课程号101的最低成绩的学生的学号。

SELECT XH FROM CJB

WHERE KCH = '206' AND CJ>= ANY

( SELECT CJ FROM CJB

WHERE KCH = '101'

);

查找选修了全部课程的同学姓名。

SELECT XM FROM XSB

WHERE NOT EXISTS

( SELECT *FROM KCB

WHERE NOT EXISTS

( SELECT *

FROM CJB

WHERE XH=XSB.XH AND KCH=KCB.KCH )

);

查找与101102号同学所选修课程一致的同学的学号。

SELECT DISTINCT XH FROM CJB CJ1

WHERE NOT EXISTS

( SELECT *FROM CJB CJ2

WHERE CJ2.XH ='101102' AND NOT EXISTS

( SELECT *FROM CJB CJ3

WHERE CJ3.XH= CJ1.XH

AND CJ3.KCH = CJ2. KCH)

);

在XSB表中查找1990年1月1日以前出生的学生的姓名和专业。

SELECT XM, ZY

FROM  (SELECT * FROM XSB

WHERE CSSJ

查找XSCJ数据库每个学生的情况以及选修的课程情况

SELECT XSB.* ,CJB.*

FROM XSB , CJB

WHERE XSB.XH=CJB.XH;

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

SELECT XSB.XH, XM, KCM, CJ

FROM XSB, KCB, CJB

WHERE XSB.XH = CJB.XH AND KCB.CH = CJB. KCH

AND KCM = '计算机基础'  AND CJ >= 80;

用FROM的JOIN关键字表达下列查询:查找选修了206课程且成绩在80分以上的学生姓名及成绩。

SELECT XM , CJ

FROM XSB JOIN CJB ON XSB.XH = CJB.XH

WHERE KCH = '206' AND CJ>=80;

用FROM的JOIN关键字表达下列查询:查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。(三表连接)

SELECT XSB.XH , XM , KCM , CJ

FROM XSB

JOIN CJB JOIN KCB ON CJB.KCH = KCB.KCH

ON XSB.XH = CJB.XH

WHERE KCM = '计算机基础'  AND CJ>=80;

查找不同课程成绩相同的学生的学号、课程号和成绩。

SELECT a.XH,a.KCH,b.KCH,a.CJ

FROM CJB a JOIN CJB b

ON a.CJ=b.CJ AND a.XH=b.XH AND a.KCH!=b.KCH;

A表                B表

a1       a2       b1      b2

------------    ------------

1          4       2

3

2          5       4

5

6          7       6

7

3          4       8

9

7          8

左连接

select a.a1,a.a2,b.b2

from a left outer join b

on a.a2=b.b1

执行结果为:            a1

a2    b2

----------------

1      4

5

3      4

5

7      8

9

2      5

6      7

右连接

select a.a1,a.a2,b.b2

from a right outer join b

on a.a2=b.a1

执行结果为:            a1

a2    b2

----------------

1      4

5

3      4

5

7      8

9

7

3

交叉连接

select a.a1,a.a2,b.b2

from a cross join b

执行结果为:           a1

a2    b2

----------------

1      4

3

2      5

3

6      7

3

3      4

3

7      8

3

1      4

5…………..

左连接右连接交叉连接具体问题

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

SELECT XSB.* , KCH

FROM XSB LEFT OUTER JOIN CJB ON XSB.XH =

CJB.XH;

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

SELECT CJB.* , KCM

FROM CJB RIGHT JOIN KCB ON CJB.KCH= KCB.KCH;

列出学生所有可能的选课情况。

SELECT XH, XM, KCH, KCM

FROM XSB CROSS JOIN KCB;

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

SELECT AVG(CJ) AS 课程101平均成绩

FROM CJB

WHERE KCH='101';

求选修101课程的学生的最高分和最低分。

SELECT MAX(CJ) AS 课程101的最高分, MIN(CJ) AS 课程101的最低分

FROM CJB

WHERE KCH='101';

求学生的总人数。

SELECT COUNT(*) AS 学生总数

FROM XSB;

求选修了课程的学生总人数。

SELECT COUNT(DISTINCT XH) AS 选修了课程的总人数

FROM CJB;

统计离散数学课程成绩在85分以上的人数。

SELECT COUNT(CJ) AS 离散数学85分以上的人数

FROM CJB

WHERE CJ>=85 AND KCH=

( SELECT KCH

FROM KCB

WHERE

KCM= '离散数学'

);

将XSCJ数据库中各专业输出。

SELECT ZY AS 专业

FROM XSB

GROUP BY ZY;

求XSCJ数据库中各专业的学生数。

SELECT ZY AS 专业,COUNT(*) AS 学生数

FROM XSB

GROUP BY ZY;

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

SELECT KCH AS 课程号, AVG(CJ) AS 平均成绩,COUNT(XH) AS 选修人数

FROM CJB

GROUP BY KCH;

HAVING子句

查找XSCJ数据库中平均成绩在85分以上的学生的学号和平均成绩。

SELECT XH AS 学号, AVG(CJ) AS 平均成绩

FROM CJB

GROUP BY XH

HAVING AVG(CJ)>=85;

查找选修课程超过两门且成绩都在80分以上的学生的学号

SELECT XH AS 学号

FROM CJB

WHERE CJ>=80

GROUP BY XH

HAVING COUNT(*) > 2;

查找通信工程专业平均成绩在85分以上的学生的学号和平均成绩

SELECT XH AS 学号,AVG(CJ) AS 平均成绩

FROM CJB

WHERE XH IN

( SELECT XH

FROM XSB

WHERE ZY= '通信工程'

)

GROUP BY XH

HAVING AVG(CJ) > =85;

将通信工程专业的学生按出生时间先后排序。

SELECT *

FROM XSB

WHERE ZY= '通信工程'

ORDER BY CSSJ;

将计算机专业学生的“计算机基础”课程成绩按降序排列。

SELECT XM AS 姓名, KCM AS 课程名, CJ AS 成绩

FROM XSB, KCB, CJB

WHERE XSB.XH=CJB.XH AND CJB.KCH= KCB.KCH

AND KCM= '计算机基础' AND ZY= '计算机'

ORDER BY CJ DESC;

查找xs表中学号最靠前的5位学生的信息。

select 学号, 姓名, 专业名, 性别, 出生日期, 总学分

from xs

order by 学号

limit 5;

--11.统计每个学生的选课门数,并按选课门数的递增顺序显示结果。 SELECT student.Sname 学生姓名,student.Sno 学生学号,COUNT(SC.Sno) 选课门数 FROM student inner join SC ON SC.Sno=student.Sno GROUP BY

student.Sname,student.Sno ORDER BY COUNT(SC.Sno) ASC

select student.sname,sc.sno,count(cno) cc

from sc inner join student

on sc.sno=student.sno

group by sno

order by cc asc;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值