mysql自学,数据库基本操作语句_查询_插入_更新

来源:互联网 发布:美国制造业数据 编辑:程序博客网 时间:2024/06/05 08:17

今天是学习MySQL的第四天,

学习目标:

数据操作语句

 

学习内容:

单表查询、插入数据、更新数据

 

遇见的问题:

单表查询:无

插入数据:如何插入中文数据

更新数据:如何多条件更新数据

 

案例代码如下:

DATABASE:book

案例用表:student,course,sc(studentCourse)

(建表过程省略)

单表查询

L1,查询全体学生的 学号 和 姓名

SELECT sno ,sname FROM student

 

L2,查询全体学生的姓名、学号和所在系

SELECT sname,sno,sdept FROM student

 

L3,查询全体学生的详细信息

SELECT sno,sname,ssex,sage,sdept FROMstudent

此句等价于

SELECT * FROM student

 

L4,查询全体学生的姓名及出生年份

SELECT sname,2010-sage FROM student

 

L5,查询全体学生的姓名和出生年份,并在 出生年份 列前加一个新列,新列的每行数据均为 出生年份 常量值

SELECT sname,’出生年份’,2010-sageFROM student

SELECT sname AS 姓名, ‘出生年份’ AS 常量列 , 2010-sageAS 年份

FROM student

 

L6,在选课表中查询有哪些学生选修了课程,列出选课学生的学号

SELECT sno FROM sc

 

//去重查询(DISTINCT 关键字可以去掉查询结果中的重复行)

SELECT DISTINCT sno FROM sc

 

L7,查询计算机系全体学生的姓名

SELECT sname FROM student WHERE sdept = ‘计算机系’

 

L8,查询所有年龄在20岁以下的学生的姓名和年龄

SELECT sname,sage FROM student WHERE sage<20

SELECT sname,sage FROM student WHERE NOTsage >=20

 

L9,查询考试成绩有不及格的学生的符号

SELECT DISTINCT sno FROM sc WHERE grade<60

 

L10,查询年龄在20~23岁之间的学生的姓名、所在系和年龄

SELECT sname,sdept,sage FROM student

WHERE sage BETWEEN 20 AND 23

SELECT sname,sdept,sage FROM student

WHERE sage >= 20 AND sage <=23

 

L11,查询年龄不在20~23岁之间的学生姓名、所在系和年龄

SELECT sname,sdept,sage FROM student

WHERE sage NOT BETWEEN 20 AND 23

SELECT sname,sdept,sage FROM student

WHERE sage <20 OR sage>23

 

L12,查询信息系、数学系和计算机系学生的姓名和性别

SELECT sname,ssex FROM student

WHERE sdept IN (‘信息系’,’数学系’,’计算机系’)

SELECT sname,ssex FROM student

WHERE sdept =’信息系’ OR sdept=’数学系’ OR sdept =’计算机系’

 

L13,查询既不是信息系、数学系,也不是计算机系学生的姓名和系别

SELECT sname,ssex FROM student

WHERE sdept NOT IN (‘信息系’,’数学系’,’计算机系’)

SELECT sname,ssex FROM student

WHERE sdept!=’信息系’ AND sdept!=’数学系’ AND sdept !=’计算机系’

 

插入数据

因为插入过程中有中文,编码格式需设置为UTF8,否则会报错

我用的是ZIP免安装,配置文件是没有my.ini的,手动加了之后重启mysql 也不能更改为UTF8,所以用的是代码更改

更改方式如下:

SHOW VARIABLESLIKE 'character%';

查看所有值的属性,如果哪个不是utf8的,输入如下语句

SET character_set_datebase =utf8

其中小写部分为修改部分

以此类推

L63(63是因为我跟书自学,例子追踪到书上的具体例子,书名《数据库原理与应用教程》,何玉洁,第三版,机械工业出版社,且,大学SQL教材选用的是它)

将新生记录(9521104,陈东,男,18岁,信息系)插入到student 表

INSERT INTO student VALUES (‘9521104’,’陈东’,’男’,18,’信息系’)

PS:这里我 18 对应的是student 表中的 sage column,类型为 TINYINT,

同时

汉字定义的类型为NVARCHAR,因为汉字的编码是两个字节,而统一编码不管对哪个地区、哪种语言均采用双字节(16位)编码,即世界上所有的字符统一进行编码

 

L64,在sc表中插入一条新纪录,学号为“9521104”,选的课程号为“c01”,成绩暂缺。

INSERT INTO sc(sno ,cno) VALUES (‘9521104’,’c01’)

PS:对于L64 ,由于提供的值的个数与表中的列个数不一致,因此在插入语句中必须列出列名。而且sc表中的grade  列必须允许为NULL,因为此句实际插入的值为:

(‘9521104’,’c01’,NULL)

 

更新数据

L65,将所有学生的年龄加1

UPDATE student SET sage =sage +1

 

L66,//基于本表条件的更新

将“9512101”学生的年龄改为21岁

UPDATE student SET sage =21

WHERE sno =’9512101’

PS:可以接AND  例如

UPDATE student SET sage =21

WHERE sno =’9512101’  AND ssex = ‘男’

 

L67,将计算机系全体学生的成绩加5分

//用子查询实现

UPDATE sc SET grade =grade +5

WHERE sno IN

(SELECT sno FROM student

WHERE sdept =’计算机系’

);

 

//用多表连接实现

UPDATE sc SET grade = grade +5

FROM sc JOIN student ON sc.sno =student.sno

WHERE sdept =’计算机系’

0 0
原创粉丝点击