Python学习日志0317 MySQL数据库语法及事例汇总(下)运算符、数据表的增删改查

本文介绍MySQL的基本运算符、通配符及数据操作,包括插入、更新、删除和查询操作,并通过实例展示了如何使用这些功能。

一、MySQL运算符

1.算数运算符

2.字符串自动转换为数字

MySQL中,由字符串表示的数字在需要计算时,会自动转换为数字,但要遵循两个基本原则:

①如果第一位是数字的字符串被应用于算术运算中,则该字符串转换为第一个数字的值

②如果数字和字符混合而成的字符串无法顺利转换为数字,则默认转换为0

3.比较运算符 

对运算符两边的表达式进行比较,比较的结果总是“1”(真),“0”(假),或“NULL”(不确定)

注:①比较运算符可对数字和字符串进行比较

       ②对数字进行比较时,将数字作为浮点型进行比较

       ③对字符串进行比较时,不区分大小写(除非使用特殊的BINARY二进制关键字)

       ④对于<>运算符,如果表达式两边不相等返回真值,相等返回假值

另外,可以使用IS NULL或者IS NOT NULL运算符来测定是否为空

4.MySQL数据库中的通配符

①“%” (百分号)  代表任意长度(长度可以为0)的字符串

例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等

②“_ ”(下横线)  代表任意单个字符

例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等

注:如果已知字符串的部分字符,可通过like语句和通配符进行搜索

例:select 'Roger says hello' like 'll';

5.逻辑运算符

6.位运算符

“~”          表示按位取反。     “^”         表示异或。

 

二、插入操作

语法:NSERT  [INTO]   表名  ([列名1],[列名2]) VALUES (值列表)

注:如果表明后面没有注明列名,则默认为左右列插入数据

例1:向people表中添加一条记录:

insert into people(name,age) 
values(“zhangsan”,20);

例2:创建一张学生信息表,往表中插入数据

create table students(
	scode int not null auto_increment,
	sname varchar(20) not null,
	saddress varchar(20) default‘未知’,
	sgrade int,
	semail varchar(20),
	ssex bit,
	primary key(scode)
);

INSERT INTO STUDENTS (SName,SGrade,SSex)
VALUES('测试女生1',75,0), 
('测试女生2',77,0),
('测试女生3',83,0),
(‘测试男生1',81,1),
('测试女生4',90,0),
(‘测试男生2',94,1),
('测试女生5',51,0),
(‘测试男生3',53,1);

注:①每次插入一行数据,不可能只插入半行或者几列数据,因此,插入的数据是否有效将按照整行的完整性的要求来检验

       ②每个数据值的数据类型、精度和小数位数必须与相应的列匹配;

       ③如果在设计表的时候就指定了某列不允许为空,则必须插入数据;

       ④具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值

         例:INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX)

                 VALUES ('张青裁',DEFAULT,6,'ZQC@Sohu.com',0)

 

三、更改操作

语法:UPDATE  表名  SET  列名 = 更新值  [WHERE <更新条件>]

注:where字句用来设置条件,即只更改满足条件的行;如果没有使用where字句,则修改所有行

例:将student表中的所有学生名称为"Alex"的改为"Tom":

update student set sname="Tom" where sname="Alex";

四、删除操作

语法:DELETE FROM  表名  [WHERE <删除条件>]

注:where字句用来设置条件,即只删除满足where条件的行;如果没有使用where字句,则删除所有表中的数据,但表格保留

例:删除student表中的所有年龄小于18岁的记录:   

delete from student where sage<18;

五、查询操作

语法:SELECT  列名  FROM  表名  [WHERE<查找条件>]  [ORDER BY <排序条件>  ASC/DESC]

注:查询操作并不产生数据表,而是将查找到的数据以表的形式显示出来,不进行存储

查询记录操作:

语句作用
distinct排重
from子句指定查询数据的表
where子句查询数据的过滤条件
group by子句对匹配where子句的查询结果进行分组
having子句对分组后的结果进行条件限制
order by子句对查询结果结果进行排序,后面跟desc降序或asc升序(默认)
limit子句对查询的显示结果限制数目
procedure子句查询存储过程返回的结果集数据

例:

-- 举例1 :	查询全体学生的学号与姓名。
select sno,sname from student;

-- 举例2 :	查询全体学生的详细记录。
select  sno,sname,ssex,sage,sdept from student;  
或select  *  from student; 

-- 举例3 : 	查全体学生的姓名及其出生年份。
select sname,2014-sage from student; 

-- 举例4 :	查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。
select sname,'year of birth: ',2008-sage, lower(sdept) from student;

-- 举例5 :	查询选修了课程的学生学号(去掉重复的记录)
select   distinct  studentid  from sc;

-- 举例6 :	查询全体学生的学号与姓名,用中文显示列名。
select sno as ‘编号’,sname as ‘姓名’ from student;

-- 举例7 :	给表设置别名。
select   s.sno,s.sname  from student as s; 

-- 举例8 : 	查询年龄在20以下的学生的姓名。
select sname from student where sage<20; 

-- 举例9 :	查询全体学生的姓名、年龄,要求按照年龄降序排序。
select sname,sage from student order by sage desc;

-- 举例10 :	查询年龄最大的前3个学生的姓名和年龄,或第4、5个学生
select sname,sage from student order by sage desc limit 3;或(limit 3,2)

统计函数(集函数)

语句作用
记数函数: count(列名)计算元素的个数
求和函数: sum(列名)对某一列的值求和,但属性必须是整型
计算平均值:avg(列名)对某一列的值计算平均值
求最大值: max(列名)找出某一列的最大值
求最小值: min(列名)找出某一列的最小值

例:

-- 举例11 :	查询学生总数。		   
select count(*) from student;
-- 举例12 :	查询选修了课程的学生人数。			 
select count(distinct studentid) from sc;
-- 举例13 :	查询1号课程的学生平均成绩。			 
select avg(grade) from sc where courseid=1;
-- 举例14 :	查询1号课程的学生最高分和最低分。
select max(grade) as ‘最高分’,min(grade) as ‘最低分’ from sc where courseid=1;
-- 举例15 :	查询每个学生的平均成绩。
select studentid,avg(grade) as ‘平均成绩’ from sc group by studentid;
-- 举例16 :	查询学生的平均成绩在70分以上的。
select studentid,avg(grade) as ‘平均成绩’ from sc group by studentid having avg(grade)>70;

在where子句中使用谓词设置查询条件:

子句作用
 BETWEEN    AND在两数之间
NOT   BETWEEN    AND不在两数之间
IN <值表>是否在特定的集合里
NOT IN <值表>是否不在特定的集合里
LIKE模糊查询(根据已知字符串的一部分进行查询)
IS  NULL/IS  not  NULL为空/不为空
REGEXP检查一个值是否匹配一个常规表达式。

例:

-- 举例17 :	查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄 。
select sname,sdept,sage from student where sage between 20 and 23;
-- 举例18 :	查询年龄不在20~23岁之间的学生姓名、系别和年龄。
select sname,sdept,sage from student where sage not between 20 and 23;
-- 举例19 :	查询'信息系'、'美术系'和'计算机系'学生的姓名和性别。
select sname,ssex from student where sdept  in (‘信息系',‘美术系',‘计算机系');
-- 举例20 :	查询学号为95001的学生的详细情况。
select * from student where sno like '95001';
等价于:select * from student where sno='95001'; 
-- 举例21 :	查询所有姓刘学生的姓名、学号和性别。
select sname,sno,ssex from student where sname like ‘刘%';
-- 举例22 :	某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。
select studentid,courseid from sc where grade is null;
-- 举例23 :	查所有有成绩的学生学号和课程号。
select studentid,courseid from sc where grade is not null;
-- 举例24 :	查询计算机系年龄在20岁以下的学生姓名。
select sname from student where sdept=‘计算机系' and sage<20;
-- 举例25 :	查询信息系、美术系和计算机系学生的姓名和性别
select sname,ssex from student where sdept in (‘信息系','美术','计算机系');
-- 可改写为:
Select sname,ssex from student where sdept='信息系' or sdept='美术' or sdept='计算机系';
-- 举例26 :	查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
select studentid,grade from sc where courseid=3 orber by grade desc;
-- 举例27 :	查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
select * from student order by sdept,sage desc; 

多表查询问题:同时查询显示多个数据表中的内容

分类:内连接(INNER JOIN)  左外联结   (LEFT JOIN)  右外联结   (RIGHT JOIN)

例:

-- 内连接
SELECT 	S.SName,C.CourseID,C.Grade 
From Sc c  INNER JOIN 	Students  S ON C.StudentID = S.SNo
-- 左外连接
SELECT 	S.SName,C.CourseID,C.Grade 
From Sc AS C LEFT JOIN 	Students S ON C.StudentID = S.SNo
-- 右外连接
SELECT Titles.Title_id, Titles.Title, Publishers.Pub_name
FROM titles RIGHT OUTER JOIN Publishers ON Titles.Pub_id = Publishers.Pub_id

子查询: 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为子查询。一个SELECT-FROM-WHERE语句称为一个查询块

例:查询选修了课程名为“Java”的学生学号和姓名    

select  sno,sname from student  where sno in    
(select studentid  from sc   where  cno =      
(select cno from course     where cname=‘Java’)  );

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值