数据库-sql语句学习总结-适用于初学者

CREATE TABLE emp(

empno INT PRIMARY key,

ename VARCHAR(30),

job VARCHAR(30),

mgr INT,

hiredate DATE,

sal FLOAT,

comm FLOAT,

deptno INT

);

INSERT into emp VALUES(1007,‘张三’,‘Clerk’,7902,‘1980-12-17’,1800,0,20);

INSERT into emp VALUES(7499,‘Allen’,‘Salesman’,7698,‘1981-2-20’,1600,300,30);

INSERT into emp VALUES(7844,‘Turner’,‘Salesman’,7499,‘1981-9-8’,1500,0,30);

INSERT into emp VALUES(7698,‘Tom’,‘Manager’,0,‘1981-9-8’,6100,600,40);

INSERT into emp VALUES(7876,‘Adams’,‘Clerk’,7900,‘1987-5-23’,1100,0,20);

INSERT into emp VALUES(7900,‘James’,‘Clerk’,7698,‘1981-12-3’,2400,0,30);

INSERT into emp VALUES(7902,‘Ford’,‘Analyst’,7698,‘1981-12-3’,3000,null,20);

INSERT into emp VALUES(7901,‘Kik’,‘Clerk’,7900,‘1981-12-3’,1900,0,30);

mysql常用函数:

ifnull(列,值)判断是否为空,如果为空,取第二个参数值;

日期格式化:

mysql默认日期格式%Y-%m-%d %h:%i:%s

select now();–得到当前时间

select date_format(now(),‘%Y年%m月%d日 %H点%i分%s秒’); --格式化时间

转存失败

重新上传

取消

转存失败

重新上传

取消

获取年、月、日

select year(‘1987-10-10’);

select month(‘1987-10-10’);

select day(‘1987-10-11’);

SELECT CURDATE();–当前日期

SELECT DATEDIFF(‘1997-12-30 23:59:59’,‘1997-12-20’);

–两个日期之间的天数

SELECT   DAYOFMONTH () 第几天

SELECT  ADDDATE(‘1997-12-30 23:59:59’,10);–加日期

SELECT  SUBDATE (‘1997-12-30 23:59:59’,10);–减日期

去重复:distinct

last_day 指定日期所在月的最后一天,返回日期类型

例如:查询所有员工入职日期所在月最后一天是几号;

select LAST_DAY(hiredate) from emp

substr(字符串或者列 from 下标1开始 for 截取长度)

例如:select  SUBSTR(hiredate FROM 1 FOR 4)  from emp

concat函数,用于连接字符串,参数个数不固定

例如:查询emp数据,要求 ename empno hiredate 显示在一列中,用|隔开

select CONCAT(ename,‘|’,empno,‘|’,hiredate)  str from emp

注意: null 连接其他字符串,使用concat会产生空

例如:select  concat(ifnull(null,‘’),‘dfd’) from emp; 可以解决该问题;

大小写转化: lower(str) upper(str)

例如:select CONCAT(lower(ename),‘|’,empno,‘|’,hiredate)  str from emp 这里也说明函数可以嵌套;

求字符串中字符个数:CHAR_LENGTH(str)

注意:select  length(‘张三李四’) ; length方法求的是字节数;

select  CHAR_LENGTH(‘张三李四’)

字符串的替换:

replace

select  REPLACE(‘abcdefg’,‘a’,‘A’) 将第一个参数字符串,中第二个参数指定的子字符串,替换为第三个参数指定的字符串

四舍五入:round(number)  round (number,number)

例如:select  ROUND(123.325,2)  保留两位小数

例如:select  ROUND(123.325) 取整

adddate(日期,数字天数) 添加天数

例如:查询员工试用期满三个月,转正的日期;

select ADDDATE(hiredate,90) ,hiredate from emp

类型的转化:cast(列或者字段 as 类型)

例如:select concat(CAST(10 as char),20,sal) from emp 这里转不转都无所谓;

分组查询:

分组函数:什么是分组函数

分组函数运算每一组记录,每一组返回一个结果.(忽略空)

ysum()求和

min()最大值

max()最小值

count()统计函数(统计行记录数)

分组操作:group by

AVG ([DISTINCT|ALL]n) 求平均值

SELECT AVG(age) FROM user;

COUNT ({ *|[DISTINCT|ALL]expr})计数,

SELECT COUNT(id) FROM user;

MAX ([DISTINCT|ALL]expr)最大数

SELECT MAX(age) FROM user;

MIN ([DISTINCT|ALL]expr)最小数

SELECT MIN(age) FROM user;

SUM ([DISTINCT|ALL]n)求合

SELECT SUM(age) FROM user;

注意:组函数分组group by使用时注意

GROUP BY子句

出现在SELECT列表中的字段,如果出现的位置不是在组函数中,那么必须出现在GROUP BY子句中

SELECT SUM(age) ,name FROM user GROUP BY name;

HAVING

having 相当于where     与where的唯一区别是 当查询语句中有 组函数 的时候 就不能用where 了  只能用having

SELECT SUM(age) ,name FROM user GROUP BY name HAVING name=‘王帅’;

多表查询:

连接多个表

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

使用表连接从多个表中查询数据等值连接

SELECT table1.column, table2.column

FROM table1, table2

WHERE table1.column1 = table2.column2;

在 WHERE 子句中写入连接条件

当多个表中有重名列时,必须在列的名字前加上表名作为前缀

使用表的别名

使用表的别名简化了查询

提高了查询的性能

新建学生-课程数据库的三个表:

学生表:Student(Sno,Sname,Ssex,Sage,Sdept) Sno为主码;

学号Sno

姓名Sname

性别Ssex

年龄Sage

所在系Sdept

课程表:Course(Cno,Cname,Cpno,Credeit) Cno为主码;

Course:

课程号Sno

课程名Cname

先行课Cpno

学分Credit

学生选修表:SC(ID,Sno,Cno,Grade)

学号Sno

课程号Cno

成绩Grade

DROP TABLE Student;

DROP TABLE Course;

DROP TABLE SC;

CREATE TABLE Student

(

Sno INT AUTO_INCREMENT PRIMARY KEY,

Sname   VARCHAR(30) ,

Ssex VARCHAR(4) ,

Sage  INT,

Sdept VARCHAR(30)

);

CREATE TABLE Course

(

Cno INT AUTO_INCREMENT PRIMARY KEY,

Cname VARCHAR(30) ,

Cpno INT,

Credeit INT

);

CREATE TABLE SC

(

ID INT AUTO_INCREMENT PRIMARY KEY,

Sno INT,

Cno INT,

Grade INT

);

INSERT INTO Student (Sname,Ssex,sage, Sdept) VALUES (‘同学1’, ‘男’,28, ‘计算机’) ;

INSERT INTO Student (Sname,Ssex,sage, Sdept) VALUES (‘同学2’, ‘女’,28, ‘计算机’) ;

INSERT INTO Student (Sname,Ssex,sage, Sdept) VALUES (‘同学3’, ‘男’,28, ‘计算机’) ;

INSERT INTO Student (Sname,Ssex,sage, Sdept) VALUES (‘同学4’, ‘女’,28, ‘计算机’) ;

INSERT INTO Student (Sname,Ssex,sage, Sdept) VALUES (‘同学5’, ‘男’,28, ‘计算机’) ;

INSERT INTO Student (Sname,Ssex,sage, Sdept) VALUES (‘同学6’, ‘女’,28, ‘计算机’) ;

INSERT INTO Student (Sname,Ssex,sage, Sdept) VALUES (‘同学7’, ‘男’,28, ‘计算机’) ;

INSERT INTO Student (Sname,Ssex,sage, Sdept) VALUES (‘同学8’, ‘女’,28, ‘计算机’) ;

INSERT INTO Course (Cname, Cpno, Credeit) VALUES (‘JAVA’,1,90) ;

INSERT INTO Course (Cname, Cpno, Credeit) VALUES (‘JAVA’,2,91) ;

INSERT INTO Course (Cname, Cpno, Credeit) VALUES (‘JAVA’,3,92) ;

INSERT INTO Course (Cname, Cpno, Credeit) VALUES (‘JAVA’,4,93) ;

INSERT INTO Course (Cname, Cpno, Credeit) VALUES (‘JAVA’,5,94) ;

INSERT INTO Course (Cname, Cpno, Credeit) VALUES (‘JAVA’,6,95) ;

INSERT INTO Course (Cname, Cpno, Credeit) VALUES (‘JAVA’,7,96) ;

INSERT INTO Course (Cname, Cpno, Credeit) VALUES (‘JAVA’,8,97) ;

INSERT INTO Course (Cname, Cpno, Credeit) VALUES (‘JAVA’,9,98) ;

INSERT INTO SC (Sno, Cno, Grade) VALUES (1,1,1) ;

INSERT INTO SC (Sno, Cno, Grade) VALUES (2,2,2) ;

INSERT INTO SC (Sno, Cno, Grade) VALUES (3,3,3) ;

INSERT INTO SC (Sno, Cno, Grade) VALUES (4,4,4) ;

INSERT INTO SC (Sno, Cno, Grade) VALUES (5,5,5) ;

INSERT INTO SC (Sno, Cno, Grade) VALUES (6,6,6) ;

INSERT INTO SC (Sno, Cno, Grade) VALUES (7,7,7) ;

在介绍左连接、右连接和全连接前,

有一个数据库中重要的概念要介绍一下,即空值(NULL)。

有时表中,更确切的说是某些字段值,可能会出现空值, 这是因为这个数据不知道是什么值或根本就不存在。

空值不等同于字符串中的空格,也不是数字类型的0。因此,判断某个字段值是否为空值时不能使用=,<>这些

判断符。必需有专用的短语:IS NULL 来选出有空值字段的记录,同理,可用 IS NOT NULL 选出不包含空值的记录。

内连接 inner join

select * from Student s inner join Course c on s.sno=c.cno;

左连接left join(左表中所有数据,右表中对应数据)

select * from Student s left join Course c on s.sno=c.cno;

右连接right join(右表中所有数据,左表中对应数据)select * from Student s right join Course c on s.sno=c.cno;

全连接full outer join

select * from user where id in (select id from user where id>10)

分页查询:

通过limit关键词实现

例如:select * from emp  limit 0,5; 表示从0下标那行记录开始,查5条记录;

子查询:

• 当一个查询是另一个查询的条件时,称之为子查询。

• 子查询可以使用几个简单命令构造功能强大的复合命令。

• 子查询最常用于SELECT-SQL命令的WHERE子句中。

一个子查询必须放在圆括号中。

将子查询放在比较条件的右边以增加可读性。

子查询不包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,

并且如果指定了它就必须放在主 SELECT 语句的最后。

《MySql面试专题》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySql性能优化的21个最佳实践》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySQL高级知识笔记》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

关注我,点赞本文给更多有需要的人

询不包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,

并且如果指定了它就必须放在主 SELECT 语句的最后。

《MySql面试专题》

[外链图片转存中…(img-8HkwPeJN-1714720188247)]

[外链图片转存中…(img-6uosLQXQ-1714720188247)]

《MySql性能优化的21个最佳实践》

[外链图片转存中…(img-Qix8bJql-1714720188248)]

[外链图片转存中…(img-TAGjlHwo-1714720188248)]

[外链图片转存中…(img-x4chAnIW-1714720188248)]

[外链图片转存中…(img-FIILkgxN-1714720188249)]

《MySQL高级知识笔记》

[外链图片转存中…(img-JTPpAmyD-1714720188249)]

[外链图片转存中…(img-2nZWjseN-1714720188249)]

[外链图片转存中…(img-PJG5lvAx-1714720188249)]

[外链图片转存中…(img-mJ6QTdWw-1714720188250)]

[外链图片转存中…(img-2VBIMUUe-1714720188250)]

[外链图片转存中…(img-pn8GBAuF-1714720188250)]

[外链图片转存中…(img-75xjAP1K-1714720188251)]

[外链图片转存中…(img-NbjlHCus-1714720188251)]

[外链图片转存中…(img-UK9eUqxR-1714720188251)]

[外链图片转存中…(img-KRSt7it7-1714720188252)]

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

[外链图片转存中…(img-FWem5Czl-1714720188252)]

关注我,点赞本文给更多有需要的人

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值