SQL基础语法和各种函数

SQL基础语法和各种函数

对表的调整:

-- 修改表名
RENAME TABLE NBATeam TO NBAGame

-- 复制表结构
CREATE TABLE NBAVIP LIKE NBANumber 

-- 删除表结构
DROP TABLE NBAVIP

DML 数据操作 增 删 插

插入:
INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)VALUES('詹姆斯','男','1985-02-03','110911119',1.98,NOW())

INSERT INTO student SET NAME='科比',gender='男',birthday='1985-02-03',phone='12013117798',height=1.11,reg_time=NOW())

INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)
			    VALUES('库里','男','1998-2-3','15464546',1.83,NOW()),
			    VALUES('欧文','男','1994-2-3','154645446',1.87,NOW())
			    
-- 把别的表插入进来			    			    
INSERT INTO stu(nmuber,NAME,gender,birthday,phone,height,reg_time)SELECT * FROM student
修改:
-- 修改 where是条件
UPDATE student SET NAME='西罗',height=1.70 WHERE number=1 
删除:
-- 删除
DELETE FROM stud

DELETE FROM student WHERE number=2

注意:删除某一行后再插入是从最底部插入,不会从删除的地方插入

DQL:数据查询

-- DQL 数据查询
-- select 结果 from 表名

-- 单行函数:会对查询中的每一行数据进行处理
-- 查询指定的列
SELECT NAME,gender,birthday,phone FROM student

-- 查询所有的列 *指所有的列   查询的结果是虚拟的表格,不能操作,是只读的
SELECT * FROM student

-- 查询结果进行算术运算 + - * /
SELECT NAME,height+1 FROM student -- 显示结果是名字 身高+1

-- 去除重复数据   查询结果中所有的列都相同,视为重复数据
-- distinct用于去除重复数据
SELECT DISTINCT NAME,gender FROM student

-- like 后是搜索模式,可以筛选出符合like后的搜索模式的结果进行显示
SELECT * FROM student WHERE NAME LIKE 'f%';		-- 以f开头   显示全部列
SELECT NAME FROM student WHERE NAME LIKE '%里';		-- 以里结尾   只显示name

-- 字符函数:
-- length(列名)   以字节为单位
SELECT NAME,LENGTH(NAME),gender FROM student
-- char_length(列名)   以字符为单位
SELECT NAME,CHAR_LENGTH(NAME),gender FROM student

-- concat(str1,str2,str3)   连接多个字符串   as 别名
SELECT CONCAT(NAME,":",CHAR_LENGTH(NAME)) AS NAME,gender FROM student

-- upper()   lower()
SELECT UPPER(NAME),LOWER(NAME) FROM student

-- substring(字符串,开始位置,截取的长度)   开始位置从1开始
SELECT SUBSTRING(NAME,1,3)FROM student

-- instr(字符串,指定字符):返回字串第一次出现的位置 找不到返回0
SELECT INSTR(NAME,'里') FROM student

-- trim(删除字符串两边的空格)
SELECT TRIM(NAME),NAME FROM student
-- trim(指定的子串 from 字符串)   可以去掉前后指定的子串
SELECT TRIM('a' FROM NAME),NAME FROM student

-- lpad(字符串长度,填充字符) 左填充 右填充 到指定长度
SELECT LPAD(NAME,5,'a') FROM student

-- replace(列,'old','new') 新的取代旧的
SELECT REPLACE(NAME,'斯','补') FROM student
条件语句:
 
-- 条件语句

-- case when 条件 then 结果1 else 结果2 end	如果满足条件则显示结果1,否则结果2 end表示结束必须要加
-- AS 重命名
SELECT
	NAME,
	gender,
	(CASE WHEN height>=1.85 THEN '大于185' ELSE '不到185' END) AS '身高'
FROM
	student
	
-- ifnull(列,'要代替null的值')		如果为空就显示'值'
SELECT NAME,gender, IFNULL(height,'未录入升高') AS '身高' FROM student

-- if(条件,结果1,结果2)	如果满足条件则执行结果1,否则结果2
SELECT NAME,gender, IF(height>=1.85,'高个子','低个子')AS '身高'	FROM student
数学函数:
-- 数学函数
-- round四舍五入 
-- ceil返回大于等于参数的最小整数 floor返回小于等于参数的最大整数
SELECT NAME,gender,ROUND(height),CEIL(1.1),FLOOR(5.9) FROM student	-- ceil表示大于等于1.1的最小整数,floor表示小于等于5.9的最大整数
-- truncate(数值,保留小数的位数):截断到小数点后几位   
-- rand()返回0-1之间的随机小数
-- mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
SELECT NAME,gender,TRUNCATE(height,1),height,RAND() FROM student
日期函数:
-- 日期函数
-- now()   年月日 时分秒 系统当前时间
-- curdate() 年月日
-- curtime() 时分秒
SELECT NOW(),CURDATE(),CURTIME() FROM student
-- year(日期) 将日期格式化为年
SELECT YEAR(birthday),MONTH(birthday) FROM student
-- str_to_date('2003-3-3','%Y-%m-%d') 将字符串日期 格式化为 日期类型
SELECT STR_TO_DATE('2004-6-6','%Y-%m-%d') FROM student	-- 看起来没变化,内部实际上从字符串变成了日期类型
-- date_format(birthday,'%Y-%m') 将字符串格式化为指定的字符串
SELECT DATE_FORMAT(birthday,'%Y-%m') FROM student
-- datediff(curdate(),birthday)   计算两个日期之间的相差的天数
SELECT DATEDIFF(CURDATE(),birthday) FROM student
条件查询:
-- 条件查询
-- select * from 表名 where 条件

-- and 并且
-- or 多个条件只需要满足一个就行
SELECT * FROM student WHERE gender = '男' AND height > 1.80
SELECT * FROM student WHERE gender = '女' OR height > 1.80
SELECT * FROM student WHERE gender != '男'
SELECT * FROM student WHERE gender <> '男'
-- like 后是搜索模式,可以筛选出符合like后的搜索模式的结果进行显示
SELECT * FROM student WHERE NAME LIKE 'f%';		-- 以f开头   显示全部列
SELECT NAME FROM student WHERE NAME LIKE '%里';		-- 以里结尾   只显示name
-- between x and y 筛选出x到y的 
SELECT * FROM student WHERE height BETWEEN 1.50 AND 1.85
-- in筛选出升高为1.77 1.02的,,,not in相反
SELECT * FROM student WHERE height IN(1.77,1.02)
SELECT * FROM student WHERE height NOT IN(1.77,1.02)
-- is null筛选出身高为空的 is not null相反
SELECT * FROM student WHERE height IS NULL
SELECT * FROM student WHERE height IS NOT NULL
分组函数 聚合函数 统计函数:
-- 分组函数 聚合函数(查询多行,返回一行) 统计函数

SELECT SUM(height) FROM student	  -- 求和
SELECT AVG(height) FROM student	  -- 平均值
SELECT MAX(height) FROM student	  -- 最大值	
SELECT MIN(height) FROM student	  -- 最小值
SELECT COUNT(*) FROM student   	-- 统计个数 有多少行
union:联合
-- union 将多个查询结果合并,合并时,列数必须一致
SELECT NAME,gender FROM student WHERE gender = '女'
UNION
SELECT NAME,gender FROM student WHERE height > 1.5
-- union all 只是将查询的多个结果合并,不会去除重复数据
SELECT NAME,gender FROM student WHERE gender = '女'
UNION ALL
SELECT NAME,gender FROM student WHERE height > 1.5
排序:
-- 排序 order by 列 asc(升序) desc(降序)
SELECT * FROM student WHERE number>0 ORDER BY number ASC
SELECT * FROM student WHERE number>0 ORDER BY number DESC
SELECT * FROM student WHERE number>0 ORDER BY reg_time DESC
数量限制:
-- 数量限制 limit 0,3   0表示从0开始,3表示显示3行
SELECT * FROM student WHERE number>0 ORDER BY number DESC LIMIT 0,3
SELECT * FROM student WHERE number>0 ORDER BY number DESC LIMIT 3,3
SELECT * FROM student WHERE number>0 ORDER BY number DESC LIMIT 6,3
分组查询:
-- 分组查询 
-- 按照某一个条件进行区分
-- 统计时, 按照性别,班级,年级,本门,年份等进行分组
-- 把满足某个条件的数据分到同一组中,每个组内进行单独处理

-- 查询 男生,女生各有多少人 每个年级各有多少人 每个部门个有多少人
-- 分组统计 男生组统计依次,女生组统计一次

SELECT COUNT(*),gender FROM student GROUP BY gender
SELECT MAX(height),gender FROM student GROUP BY gender
SELECT COUNT(*),DATE_FORMAT(birthday,'%Y-%m') FROM student GROUP BY DATE_FORMAT(birthday,'%Y-%m')

-- 统计男女生各多少人
SELECT COUNT(*),gender FROM student GROUP BY gender
-- 男生和女生谁的人数大于2
-- having count(*)>2  条件   是对分组后的结果进行条件筛选
-- SQL执行先执行条件所以不能把count(*)>2放在where
SELECT COUNT(*),gender FROM student GROUP BY gender HAVING COUNT(*)>=2

你可能感兴趣的:(sql,数据库)