库和表的创建
-- 创建数据库
CREATE DATABASE IF NOT EXISTS NBA CHARSET utf8
-- 创建球员信息表
-- 编号 名字 生日 身高 体重 位置
CREATE TABLE footballer(
id INT PRIMARY KEY AUTO_INCREMENT COMMENT'主键-编号',
NAME VARCHAR(12) NOT NULL COMMENT'名字',
birthday VARCHAR(10) COMMENT'生日',
height DECIMAL(4,1) COMMENT'身高',
weight DECIMAL(4,1) COMMENT'体重',
place VARCHAR(2) COMMENT'位置'
)
-- 删除球员信息表
-- Drop table if exists footballer
-- INSERT:插入新数据
INSERT INTO footballer( id , NAME,birthday,height,weight,place)VALUES
(1,'德怀恩-书德','1982-1-17',193,96,NULL),
(2,'勒布朗-詹姆斯','1984-12-30',203,113,'前锋'),
(3,'科比-布莱恩特','1978-8-23',198,99,'后卫'),
(4,'德克-诸维斯基','1978-6-19',213,111,NULL),
(5,'克里斯-保罗','1985-5-6',182,79,'后卫'),
(6,'托尼-帕克','1982-5-17',187,83,'后卫'),
(7,'凯文-加内特','1981-7-14',212,113,NULL),
(8,'保罗-皮尔斯','1977-10-13',200,106,'前锋'),
(9,'迈克尔-乔丹','1963-2-17',198,98,'前锋'),
(10,'德怀特-蛋华德','1985-12-8',210,120,'中锋'),
(11,'姚明','1980-9-12',229,140,'中锋'),
(12,'沙奎尔-奥尼尔','1972-3-6',215,147,'中锋');
-- 创建球队信息表
-- 球队编号 球队名称 所在地
CREATE TABLE football_team(
team_number INT PRIMARY KEY AUTO_INCREMENT COMMENT'主键-球队编号',
team_name VARCHAR(6) NOT NULL COMMENT'球队名称',
location VARCHAR(6) NOT NULL COMMENT'所在地'
)
-- 删除球员信息表
-- Drop table if exists football_team
-- INSERT:插入新数据
INSERT INTO football_team( team_number, team_name,location)VALUES
(1,'湖人','洛杉矶'),
(2,'火箭','休斯顿'),
(3,'凯尔特人','波士顿'),
(4,'骑士','克利夫兰'),
(5,'马刺','圣安东尼奥'),
(6,'魔术','奥兰多');
单行函数
字符函数
-- 单行函数
-- length():获取参数值的字节个数
SELECT LENGTH(NAME) FROM footballer
-- char_length()获取参数值的字符个数
SELECT CHAR_LENGTH(NAME) FROM footballer
-- concat(str1,str2,.....):拼接字符串
SELECT CONCAT(NAME , ':',place) AS NAME FROM footballer WHERE place IS NOT NULL
-- upper()/lower():将字符串变成大写/小写
-- substring(str,pos,length):截取字符串 位置从1开始
SELECT SUBSTRING(NAME,1,2) FROM footballer
-- instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR(place,'前') FROM footballer WHERE place IS NOT NULL
逻辑处理
-- case when 条件 then 结果1 else 结果2 end; 可以有多个when
select height,place,
case
when height>210 then 'A'
when height>200 then 'B'
else 'C' end as height
from footballer;
-- if函数:if else的 效果 if(条件,结果1,结果2)
select height,place,
if(height>210,'优秀','正常')
from footballer;
-- ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回原本的值
select ifnull(place,'没有') from footballer
日期函数
-- now():返回当前系统日期+时间
SELECT NOW() FROM footballer;
-- curdate():返回当前系统日期,不包含时间
SELECT CURDATE() FROM footballer
-- curtime():返回当前时间,不包含日期
SELECT CURTIME() FROM footballer
-- 可以获取指定的部分,年、月、日、小时、分钟、秒
-- YEAR(日期列),MONTH(日期列),DAY(日期列) ,HOUR(日期列) ,MINUTE(日期列) ,SECOND(日期列)
SELECT NOW(),YEAR(NOW()) ,MONTH(NOW()),DAY(CURDATE()) FROM footballer
SELECT NOW(),HOUR(NOW()) ,MINUTE(NOW()),SECOND(NOW()) FROM footballer
-- str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期
SELECT STR_TO_DATE('2003-5-1','%Y-%m-%d') ;
SELECT
STR_TO_DATE('1998-3-2', '%Y-%c-%d') ;
#返回1998-03-02
-- date_format(日期列,格式):将日期转换成字符串
SELECT DATE_FORMAT(birthday,'%Y-%m') FROM footballer
-- datediff(big,small):返回两个日期相差的天数
SELECT DATEDIFF(NOW(),birthday) FROM footballer;
分组函数
分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计数
(非空)
1.sum,avg一般用于处理数值型max,min,count可以处理任何类型
2.以上分组函数都忽略null值
3.count函数的一般使用count(*)用作统计行数
4.和分组函数一同查询的字段要求是group by后的字段
-- 分组函数 sum(height)
-- 平均值
SELECT AVG(height) FROM footballer
-- 求和
SELECT SUM(height) FROM footballer
-- 最大值
SELECT MAX(height)FROM footballer
-- 最小值
SELECT MIN(height) FROM footballer
-- 计数
SELECT COUNT(*) FROM footballer