mysql as子句为表取名_MySQL学习

  • Post author:
  • Post category:mysql


一,什么是MySQL,市面上常见的数据库有哪些?

MySQL是目前最受欢迎开源的SQL数据库管理系统,数据库是长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据”仓库”

作用 : 保存,并能安全管理数据(如:增删改查等),减少冗余…

1、MySQL是开源免费的。

2、MySQL服务器是可靠的、易于使用的、快速的。

3、MySQL服务器工作在客户/服务器或嵌入系统中。

4、MySQL软件很多。

5、MySQL是一个关系数据库管理系统。

常见的数据库有mysql 、SQL Server、Oracle、Sybase、DB2等

二,如何创建一个数据库?

用管理员权限打开cmd,输入net start mysql 打开MySQL,然后打开SQLyog在询问里输入CREATE DATABASE [IF NOT EXISTS] 数据库名;创建表 CREATE TABLE [IF NOT EXISTS] `表名`(`字段名1` 列类型 [属性][索引][注释]  )[表类型][表字符集][注释};

三,对数据库进行增删改查

1. 增 :INSERT INTO 表名[(字段1,字段2,字段3….)]

VALUES(`值1`,`值2`,`值3`)

字段或值之间用英文逗号隔开.

‘字段1,字段2…’该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致.

可同时插入多条数据 , values 后用英文逗号隔开.

2. 删:DELETE FROM 表名[WHERE condition];

注意:condition为筛选条件,如不指定则删除该表的所有列数据

TRUNCATE命令  TRUNCATE [TABLE] table_name;

用于完全清空表数据,但表结构,索引,约束等不变;

相同:都能删除数据,不删除表结构,但TRUNCATE速度更快

不同:使用TRUNCATE TABLE重新设置       AUTO_INCREMENT计数器        使用TRUNCATE  TABLE不会对事务有影响

3.改:UPDATE(修改数据)

#语法:UPDATE 表名 SET column_name=value [,column_name2=value2,…] [WHERE condition];

#注意:column_name 为要改的数据列

value为修改后的数据

condition为筛选 条件,如果不指定的话,则修改该表的所有列是数据

where条件子句可以理解为,有条件的从表中筛选数据

4.查

4.1  SELECT语句(数据查询语言)

在数据库管理中使用最频繁最高的语句,也是数据库语言中最核心,最重要的语句

SELECT [ALL | DISTINCT]#distinct去除重复项,默认为all

[left | right | inner join table_name2] #连接查询

[WHERE …] #指定结果满足的条件

[GROUP BY …] #指定结果按照哪几个字段来分组

[HAVING] #过滤分组的记录必须满足的次要条件

[ORDER BY …] #指定查询记录按一个或多个条件排序

[LIMIT {[offset,]row_count | row_countOFFSET offset}];# 指定查询的记录从哪条至哪条

查询表中所有的数据列结果,采用“*”符号,比如

select*from student

但是这样效率低,不推荐使用

#查询所有的学生信息

select * from student

#查询指定列(学号,姓名)

select studentno,studentname from student;

4.2  as字句作用

可给数据列取一个新名字

可给表取一个新名字

可把经计算或总结的结果用一个新名称来代替

#这里是为列取别名(当然as关键字可以省略)

select studentno as 学号,studentname as 姓名 from student;

#使用as也可以为表取名

select studentno as 学号,studnetname as 姓名 from student as s;

#使用as,为查询结果取一个新名字

#cancat()函数拼接字符串

select concat(‘姓名:’,studentname) as 新姓名 from student;

4.3  distinctg关键字的使用

作用去掉select查询返回的记录结果中重复的记录(返回所有列的值都相同),只返回一条

#查看哪些同学参加了考试(学号)—去除重复项

select * from result;#查看考试成绩

select studentno from result;#查看哪些同学参加了考试

select distinct studentno from result;

#distinct去除重复项,默认是all

select version();#查询版本号

select 100*3-1 as 计算结果;#计算表达式

#学员考试成绩集体提分一分查看

select studentno,studentresult+1 as ‘提分后’ from result;

避免sql返回结果中包含 ’.’  ‘,’  ‘*’ 和括号等干扰开发程序语言

4.4  where条件语句

用于检索数据表中符合条件的记录

例如

#满足条件的查询(where)

select studentno,studentresult from result;

#查询考试成绩在95~100之间的

select studentno,studentresult

from result

where studentresult>=95 and studentresult<=100;

#其中and也可以写成&&select studentno,studentresult

from result

where studentresult>=95 && studentresult<=100;

#还可以这样表示

select studentno,studentresult

from result

where studentresult between95 and 100;

#除了1000号同学,要其他同学的成绩

select studentno,studentresult

from result

where studentno!=1000;

#使用 not

select studentno,studentresult

from result

where not studentno=1000;

4.5  模糊查询

比较操作符

操作符名称

语法

描述

is null

a is null

若操作符为null,则结果为真

is not null

a is not null

若操作符不为null,则结果为真

between

a between b and c

若a在b与c之间,则结果为真

like

a like b

m模式匹配,若a匹配b,则结果为真

in

a in (a1,a2,a3…)

若a等于a1,a2,a3中的某一个,则结果为真

相同数据类型的数据之间才能进比较

#模糊查询 like , in , null, between and

# LIKE

#like结合使用的通配符 :%(代表0到任意个字符) ; _ 代表一个字符

#查询姓李的同学的学号及姓名

SELECT studentno,studentname FROM student

WHERE studentname LIKE’李%’;

#查询姓李的同学,后面只有一个字的

SELECT studentno,studentname FROM student

WHERE studentname LIKE’李_’;

#查询姓李的同学,后面只有两个字的

SELECT studentno,studentname FROM student

WHERE studentname LIKE’李__’;

#查询姓名中含有 文 字的

SELECT studentno,studentname FROM student

WHERE studentname LIKE’%文%’;

#查询姓名中含有特殊字符的需要使用转义符号’\’

#自定义转义符关键字: ESCAPE ‘:’#=============================================# IN

#查询学号为1000,1001,1002的学生姓名

SELECT studentno,studentname FROM student

WHERE studentno IN (1000,1001,1002);

#查询地址在北京,南京,河南洛阳的学生

SELECT studentno,studentname,address FROM student

WHERE address IN (‘北京’,’南京’,’河南洛阳’);

#=============================================# NULL 空

#查询出生日期没有填写的同学

#不能直接写=NULL , 这是代表错误的 , 用 is nullSELECT studentname FROM student

WHERE BornDate IS NULL;

#查询出生日期填写的同学

SELECT studentname FROM student

WHERE BornDate IS NOT NULL;

#查询没有写家庭住址的同学(空字符串不等于null)

SELECT studentname FROM student

WHERE Address=” OR Address IS NULL;

4.6  连接查询

三种连接查询对比

名称

描述

INNER JOIN

查询两个表中的结果集中的交集,如果表中有至少一个匹配,则返回行

LEFT JOIN

以左表为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以null填充,即使右表中没有匹配,也从左表中返回所有的行

RIGHT JOIN

以右表为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以null填充,即使左表中没有匹配,也从右表中返回所有的行

8a1268d8881aa13757c414fbe887841d.png

#查询参加了考试的同学信息(学号,学生姓名,科目编号,分数)

SELECT*FROM student;

SELECT*FROM result;/*思路:

(1):分析需求,确定查询的列来源于两个类,student result,连接查询

(2):确定使用哪种连接查询?(内连接)*/#内连接

SELECT s.studentno,studentname,subjectno,StudentResult

FROM student s

INNER JOIN result r

ON r.studentno=s.studentno

# 右连接(也可实现)

SELECT s.studentno,studentname,subjectno,StudentResult

FROM student s

RIGHT JOIN result r

ON r.studentno=s.studentno

# 等值连接

SELECT s.studentno,studentname,subjectno,StudentResult

FROM student s , result r

WHERE r.studentno=s.studentno

# 左连接 (查询了所有同学,不考试的也会查出来)

SELECT s.studentno,studentname,subjectno,StudentResult

FROM student s

LEFT JOIN result r

ON r.studentno=s.studentno

#查一下缺考的同学(左连接应用场景)

SELECT s.studentno,studentname,subjectno,StudentResult

FROM student s

LEFT JOIN result r

ON r.studentno=s.studentno

WHERE StudentResult IS NULL

#思考题:查询参加了考试的同学信息(学号,学生姓名,科目名,分数)

SELECT s.studentno,studentname,subjectname,StudentResult

FROM student s

INNER JOIN result r

ON r.studentno=s.studentno

INNER JOIN `subject` sub

ON sub.subjectno= r.subjectno

4.7  排序(ORDER BY)

解释:order by 语句用于根据指定的列对结果集进行排序,默认按照asc升序记录进行排序,desc进行降序排序

#查询:学习数据库结构的同学的所有考试结果(学号,学生姓名,科目名称,成绩)

#按成绩降序排序

SELECT s.studentno,studentname,subjectname,StudentResult

FROM student s

INNER JOIN result r

ON r.studentno=s.studentno

INNER JOIN `subject` sub

ON r.subjectno=sub.subjectno

WHERE subjectname=’数据库结构-1’ORDER BY StudentResult DESC , studentno

4.8  分页

# 每页显示5条数据

SELECT s.studentno,studentname,subjectname,StudentResult

FROM student s

INNER JOIN result r

ON r.studentno=s.studentno

INNER JOIN `subject` sub

ON r.subjectno=sub.subjectno

WHERE subjectname=’数据库结构-1’ORDER BY StudentResult DESC , studentno

LIMIT0,5

4.9 子查询

嵌套查询可以由多个子查询组成,求解的过程是最里面的优先查询,一次向外。

#查询课程为 高等数学-2且分数不小于80分的学生的学号和姓名

#方法一:使用连接查询

SELECT s.studentno,studentname

FROM student s

INNER JOIN result r

ON s.`StudentNo`=r.`StudentNo`

INNER JOIN `subject` sub

ON sub.`SubjectNo`=r.`SubjectNo`

WHERE subjectname= ‘高等数学-2’ AND StudentResult>=80#方法二:使用连接查询+子查询

#分数不小于80分的学生的学号和姓名

SELECT r.studentno,studentname FROM student s

INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`

WHERE StudentResult>=80#在上面SQL基础上,添加需求:课程为 高等数学-2SELECT r.studentno,studentname FROM student s

INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`

WHERE StudentResult>=80 AND subjectno=(

SELECT subjectno FROM `subject`

WHERE subjectname= ‘高等数学-2’)

#方法三:使用子查询

#分步写简单sql语句,然后将其嵌套起来

SELECT studentno,studentname FROM student WHERE studentno IN(

SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=(

SELECT subjectno FROM `subject` WHERE subjectname= ‘高等数学-2’)

)

五:MySQL常用函数

# 数学函数 (这里只列出一些常用的)

SELECT ABS(-8); /*绝对值*/SELECT CEILING(9.4); /*向上取整*/SELECT FLOOR(9.4); /*向下取整*/SELECT RAND();/*随机数,返回一个0-1之间的随机数*/SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/#字符串函数

SELECT CHAR_LENGTH(‘狂神说坚持就能成功’); /*返回字符串包含的字符数*/SELECT CONCAT(‘我’,’爱’,’程序’); /*合并字符串,参数可以有多个*/SELECT INSERT(‘我爱编程helloworld’,1,2,’超级热爱’); /*替换字符串,从某个位置开始替换某个长度*/SELECT LOWER(‘KuangShen’); /*小写*/SELECT UPPER(‘KuangShen’); /*大写*/SELECT LEFT(‘hello,world’,5); /*从左边截取*/SELECT RIGHT(‘hello,world’,5); /*从右边截取*/SELECT REPLACE(‘狂神说坚持就能成功’,’坚持’,’努力’); /*替换字符串*/SELECT SUBSTR(‘狂神说坚持就能成功’,4,6); /*截取字符串,开始和长度*/SELECT REVERSE(‘狂神说坚持就能成功’); /*反转*/#日期和时间函数

SELECT CURRENT_DATE();/*获取当前日期*/SELECT CURDATE();/*获取当前日期*/SELECT NOW();/*获取当前日期和时间*/SELECT LOCALTIME();/*获取当前日期和时间*/SELECT SYSDATE();/*获取当前日期和时间*/

/*获取年月日,时分秒*/SELECT YEAR(NOW());

SELECT MONTH(NOW());

SELECT DAY(NOW());

SELECT HOUR(NOW());

SELECT MINUTE(NOW());

SELECT SECOND(NOW());

#系统信息函数

SELECT VERSION();/*版本*/SELECT USER();/*用户*/# 查询姓李的同学,改成吴

SELECT REPLACE(studentname,’李’,’吴’) AS 新名字

FROM student WHERE studentname LIKE’李%’;

#聚合函数

#COUNT():返回满足SELECT条件的记录总和数,如SELECT COUNT(*)

#SUM():返回数字字段或表达式列作统计,返回一列的总和

#AVG():通常为数值字段或表达列作统计,返回一列的平均值

#MAX():可以为数值字段、字符字段或表达式列作统计,返回最大的值

#MIN():可以为数值字段、字符字段或表达式列作统计,返回最小的值

SELECT SUM(StudentResult) AS 总和 FROM result;

SELECT AVG(StudentResult) AS 平均分 FROM result;

SELECT MAX(StudentResult) AS 最高分 FROM result;

SELECT MIN(StudentResult) AS 最低分 FROM result;



版权声明:本文为weixin_39609407原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。