1.使用select 语句进行查询
#基本查询
select 列名 from 表名 where 条件
#where条件是可选的,如果不限制,那么就查询所有的数据
2.查询所有的数据行和列
select * from 表名
3.查询空值
#查询email邮箱为空
select studentName from student where email is null;
4.常用的函数
(一)聚合函数
函数名 | 作用 |
avg() | 返回某字段的平均值 |
count() | 返回某字段的行数,记录行数 |
max() | 求最大值 |
min() | 求最小值 |
sum() | 求总和 |
(二)常用的字符串函数
函数名 | 作用 | 举例 |
concat() | 连接字符串 | select concat('My','SQL'); 返回:MySQL |
Insert () | 替换字符串 | select insert('这是MySQl数据库',3,10,'MySQL'); 返回:这是MySQL |
lower() | 转小写 | select lower('MYSQL'); 返回:mysql |
upper() | 转大写 | select upper('mysql'); 返回:MYSQL |
substring() | 返回字符串的长度 | select substring('JavaMySQLOracle',5,5); 返回:MySQL |
(三)常用时间日期函数
函数名 | 作用 | 举例 |
curdate() | 获取当前时间 | select curdate(); 返回;2018-11-14 |
curtime() | 获取当前日期 | select curtime(); 返回:16:46:23 |
now() | 获得当前日期和时间 | select now(); 返回:2018-11-14 16:47:47 |
week() | 获得日期date是一年中的第几周 | select week(now()); 返回:45 |
year() | 返回日期的date的年份 | select year(now()); 返回:2018 |
hour() | 返回时间time的小时值 | select hour(now()); 返回:16 |
minute() | 获得时间的分钟值 | select minute(now()); 返回:50 |
datediff(str1,str2) | 返回日期参数l两个数之间的天数 | select datadiff(now(),'2008-8-8'); 返回:3750 |
adddate(date,n) | 计算日期参数date加上n天后打的日期 | select adddate(now(),5); 返回:2018-11-14 16:53:45 |
(四)数学函数
函数名 | 作用 | 举例 |
ceil() | 向上取整 | select (2.4); 返回;3 |
floor() | 向下取整 | select floor(2.6); 返回:2 |
rand() | 返回0~1之间的随机数 | select rand(); 返回:0.3368414084770171 |
5.order by 子句排序查询
#对查询结果进行排序
select studentNO as 学号, studentResult as 考试成绩 from student
where studentResult>60
order by studentResult desc;
6.Limit分页查询
#语法
select 列名 from 表名 where 条件 Limit 0,5;
#其中0代表起始位置,也就是索引,5代表要显示多少条数据
7.多表连接查询
(一)内连接查询
内连接查询是最常用,最典型的连接查询,特别是两表之间经常用到!!!
内连接查询:得到的结果是表于表之间共同的列!
#两表之间内连接查询
SELECT s.gradeId AS 年级编号,s.StudentName AS 学生姓名 FROM student AS s
INNER JOIN grade AS g
ON g.gradeID=s.gradeID;
(二)外连接查询:左外连接,右外连接
左外连接:以左表为基表,返回左表的数据,右表没有匹配上的以null填充。
#左外连接查询
select studentName,subjectNo,studentReuslt from student as s
left join result as r
on r.studentNo=s.studentNo;
右外连接:以右表为基表,返回右表的数据,左表没有匹配上的以null填充。
#右外连接查询
select studentName,subjectNo,studentReuslt from student as s
right join result as r
on r.studentNo=s.studentNo;
8.常用的一些函数汇总
#--------------------------------------------------------------
#---------------------------数学函数---------------------------
#--------------------------------------------------------------
SELECT ABS (-8); #绝对值
SELECT CEILING (9.8); #大于等于我的最小的整数
SELECT FLOOR (9.3); #小于等于我的最大的整数
SELECT RAND (); #返回0~1之间的随机数
SELECT RAND (10); #以某个数作为种子,每次生成重复数字
SELECT SIGN(0); #符号函数,所有的正数返回1,负数返回-1,0返回0
#---------------------------------------------------------------
#------------------------字符串函数-----------------------------
#--------------------------------------------------------------
SELECT CHAR_LENGTH ('好好学习'); #返回字符串的长度
SELECT CONCAT('我','爱','java'); #合并字符串
SELECT INSERT('我爱你java',1,3,'很爱');#替换字符串,从某个位置开始,替换某个长度 ***
SELECT INSERT('我爱你java',10,3,'很爱');#如果起始位置超过字符串的长度,返回原字符串 ***
SELECT LOWER('I LOVE YOU'); #变小写
SELECT UPPER('i love you'); #变大写
SELECT LEFT('北京欢迎你',2); #从左边截取2个
SELECT RIGHT('北京欢迎你',3); #从右边截取3个
SELECT REPLACE('北京欢迎你,你好','你','你们'); #替换 ***
SELECT SUBSTR('北京欢迎您',1,3); #截取,从哪个位置开始,截取到哪个位置 ***
SELECT REVERSE('北京欢迎你'); #反转字符串
#--------------------------------------------------------------
#-----------------------------日期函数-------------------------
#--------------------------------------------------------------
#获得当前的日期
SELECT CURRENT_DATE();
#获得当前的日期前和时间
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 TIMESTAMPDIFF(YEAR,bornDate,CURDATE()) AS 年龄,bornDate AS 出生日期 FROM student;
#根据出生日期,求出年龄---接近实际周岁
SELECT ROUND(DATEDIFF(CURDATE(),bornDate)/365.2422) AS 年龄,bornDate AS 出生日期 FROM student;
#查询姓李的同学,改成历
SELECT REPLACE(studentName,'李','历') AS 新名字
FROM student WHERE studentName LIKE '李%'