基本语句
/*创建数据库并指定字符集*/
CREATE DATABASE tablename DEFAULT CHARSET utf8mb4
/*显示所有数据库*/
SHOW DATABASES
/*删除数据库*/
DROP DATABASE tablename
/*切换数据库*/
use tablename
/*查询当前所在数据库*/
SELECT DATABASE()
/*查询当前数据库的所有表*/
SHOW TABLES
/*创建表 要声明varchar的长度 COMMENT '姓名' 注释*/
CREATE TABLE tabname( nikenam VARCHAR(50) COMMENT '姓名', age INT COMMENT '年龄', address VARCHAR(50) COMMENT '地址' ) COMMENT '个人信息';
/*删除表*/
DROP TABLE tabname
/*查看表结构*/
DESC tabname
/*查看表的详细信息 建表语句...*/
SHOW CREATE TABLE tabname
#表中添加字段 添加username字段类型为varchar长度为255
ALTER TABLE userinfo add gender VARCHAR(1)
#修改字段名称
ALTER TABLE zjq CHANGE username zjqname VARCHAR(255)
#删除表字段 zjq中删除nikename字段
ALTER TABLE zjq drop nikeName
#修改表名称 zjq修改为userinfo
ALTER TABLE zjq RENAME TO userinfo
mysql数据类型
数值类型
字符类型
char的性能要高一点 而varchar要差一点,因为varchar要去根据内容计算所占用的空间
char 定长字符串 长度固定 比如性别使用char
varchar 变长字符串 长度不固定 比如姓名,地址 使用varchar
日期类型
#插入数据
INSERT INTO userinfo (id,username,age) VALUES (0,'ceshi01',22),(1,'ceshi02',22),(2,'ceshi03',22);
#插入数据 整条插入
INSERT INTO userinfo VALUES(2,'ceshi',22)
#插入数据 整条插入
INSERT INTO userinfo VALUES(1,'ceshi',22)
#查询表数据
SELECT * FROM userinfo
#删除年龄为22岁的数据
DELETE FROM userinfo WHERE age = 22;
#修改id = 2的数据 age=23 username=ceshi
UPDATE userinfo SET username = '测试插入', age = 23 WHERE id = 2;
#修改全部数据的username = epro age = 33
UPDATE userinfo SET username = 'epro',age = 33;
#只在userinfo中查询age,id
SELECT age,id FROM userinfo
SELECT username FROM userinfo
#别名查询
SELECT username AS '姓名' FROM userinfo
#去除重复数据
SELECT DISTINCT username from userinfo
#-----------------普通条件查询------------------------
#条件查询
SELECT * FROM userinfo WHERE age = 33
#条件查询
SELECT * FROM userinfo WHERE age >= 33
#条件查询
SELECT * FROM userinfo where age != 22
#条件查询
SELECT * FROM userinfo where address=''
#条件查询
SELECT * FROM userinfo where address is null
#条件查询
SELECT * FROM userinfo where address is not null
#范围查询
SELECT * FROM userinfo WHERE age >= 20 AND age <= 40
#范围查询
SELECT * FROM userinfo WHERE age between 20 AND 40
#多条件查询
SELECT * FROM userinfo where age = 33 AND address = '南京'
#范围查询
SELECT * FROM userinfo WHERE age =33 OR age =23 or age = 58
#范围查询
SELECT * FROM userinfo WHERE age IN(33,23,58)
#模糊查询
SELECT * FROM userinfo WHERE username LIKE '%刘%'
#-----------------聚合函数------------------------
#切换到zjq数据库
USE zjq
#显示所有表
show DATABASES
#查询全部数量
SELECT count(*) FROM userinfo
#查询出全部的地址数量 null值不算入总数
SELECT count(address) FROM userinfo
#计算年龄平均数
select avg(age) from userinfo
#最大年龄
SELECT MAX(age) FROM userinfo
#最小年龄
SELECT MIN(age) FROM userinfo
#北京地区年龄之和
SELECT SUM(age) FROM userinfo where address = '北京'
#----------------分组查询--------------
#查询男的数量和女的数量 只显示分组的字段 查询其他地字段没有意义
SELECT gender, COUNT(*) FROM userinfo GROUP BY gender
#根据性别分组 算出男女平均年龄
SELECT gender, avg(age) FROM userinfo GROUP BY gender
#根据工作地址进行分组 并且年龄大于45岁的 并且人数大于等于三的地址
SELECT address,count(*) FROM userinfo where age< 45 GROUP BY address HAVING COUNT(*) >=3
#使用别名
SELECT address,count(*) as addressCount FROM userinfo where age< 45 GROUP BY address HAVING addressCount >=3
#-------------排序查询-------------------
#根据年龄排序 正序
SELECT * FROM userinfo ORDER BY age asc
#根据年龄排序 倒序
SELECT * FROM userinfo ORDER BY age DESC
#根据年龄进行正序排序 如果年龄相同 按照时间的倒序进行排序
SELECT * from userinfo ORDER BY age ASC,time desc
#--------------分页查询---------------
#LIMIT第一个参数为起始条目,第二条为结束条目
#公式为查询的页面-1*要查询的数量 每页6条数据 查询第二条 (2-1) * 6,起始的索引为6
SELECT * FROM userinfo LIMIT 5,6
#---------------------小结-------------------------
SELECT * from userinfo
#查询姓名等于'33','45','58','23'的数据
SELECT * from userinfo WHERE age in(33,45,58,23) AND gender = '女'
#查询性别男 年龄在20-45 且名字是三个字的人
SELECT * FROM userinfo WHERE gender = '男' AND age BETWEEN 20 and 40 AND username LIKE '%\_%'
SELECT * FROM userinfo WHERE gender = '男' AND age BETWEEN 20 and 40 AND username LIKE '___'
#查询年龄小于40岁 男性和女性的分别人数
SELECT gender,COUNT(*) FROM userinfo WHERE age <40 GROUP BY gender
#查询年龄小于等于35岁的姓名和年龄,并对年龄进行升序排序,如果年龄相等 按照日期进行降序排序
SELECT * FROM userinfo WHERE age <= 35 ORDER BY age ASC,time DESC
#查询性别为男,且年龄在20-40之间以内的前五个人的信息,对查询的结果进行对年龄升序排序,年龄相同用日期进行升序排序
SELECT * FROM userinfo WHERE age BETWEEN 20 AND 40 AND gender = '男' ORDER BY age ASC,time DESC LIMIT 5
# sql 执行顺序 from where select orderby,groupby, limit
#------------------------------字符串函数---------------------------------
#字符串拼接
SELECT CONCAT('hello','world')
#字符串转为小写
SELECT LOWER('HelloWorld')
#字符串转为大写
SELECT UPPER('HelloWorld')
#字符串前面填充字符
SELECT LPAD('x',3,'张x')
#字符串后面面填充字符
SELECT RPAD('hello',3,'world')
#去除字符的前后空格
SELECT TRIM(' hello world zzz ')
#截取字符串
SELECT SUBSTR('hello world',1,4)
#----小结-----
#给workNo字段补充长度为5 默认为0
UPDATE userinfo SET workNo = LPAD(workNo,5,'0')
#------------------------数值函数---------------------------------
#CEIL(X) 向上取整 FLOOR(X) 向下取整 MOD(N,M) 返回XM的模 RAND()返回0~1的随机数 ROUND(X) 参数四舍五入 保留y位小数
#向上取整
SELECT CEIL(15.5)
#向下取整
SELECT FLOOR(15.5)
#取模
SELECT MOD(4,-3)
#随机数1位
SELECT RAND()
#四舍五入 保留两位小数
SELECT ROUND(15.66666666666666,2)
#小结-----随机六位数
SELECT RPAD(ROUND(RAND() * 1000000,0),6,0)
#------------------------日期函数---------------------------------
#CURDATE() 当前日期
SELECT CURDATE()
#CURTIME() 当前时间
SELECT CURTIME()
#NOW() 当前日期和时间
SELECT NOW()
#YEAR(date) 指定日期的年份
SELECT YEAR('2022-3-28')
#MONTH(date)指定日期的的月份
SELECT MONTH('2022-3-28')
#DAY(date) 指定日期的日
SELECT day('2022-3-28')
#DATE_ADD('2022-3-28',3) 当前日期往后推迟多久 第一个参数为日期 第二个参数为固定写法 INTERVAL 3为多久 往后推3year年 往后推3month月 往后推3day日
SELECT DATE_ADD('2022-3-28',INTERVAL 3 YEAR)
#DATEDIFF(expr1,expr2)相差日期 第一个参数为之后的日期 第二个为之前的日期
SELECT DATEDIFF('2022-3-31','2022-2-28')
#小结 查询所有的天数 并根据天数进行排序
SELECT username,DATEDIFF(CURDATE(),time) AS 'diff' FROM userinfo ORDER BY 'diff' DESC
#--------------------------控制函数--------------------------------
#IF(expr1,expr2,expr3)如果value为true 返回t 否则返回fasle
SELECT if(1>2,1,2)
#IFNULL(expr1,expr2)如果value 不为空返回value1否则返回value2 NULL 为 null ,''和'null' 都不为空
SELECT IFNULL(NULL,'为空')
SELECT IFNULL('不为空','为空')
#如果地址为上海或者北京 显示为一线城市 否则二线城市
SELECT
username,
(CASE address
WHEN '北京'
THEN CONCAT('一线城市','---',address)
WHEN '上海'
THEN CONCAT('一线城市','---',address)
ELSE
CONCAT('二线城市','---',address)
END) as '工作地址'
FROM
userinfo
#小结 >=85 优秀 >=60及格 否则 不及格
#如果判断的是具体的数据 则可以使用上面的case语句 case xxx when 'xxxx' then 'xxx' end
#如果判断的为区间数据 可以使用下面的case语句 case when xxx >= xxx then 'xxxx' end
SELECT username,
(case
WHEN score >=85
THEN CONCAT('优秀','---',score)
WHEN score >= 65
THEN CONCAT('及格','---',score)
ELSE CONCAT('较差','---',score)
END )AS '成绩'
FROM
userinfo
建表语句
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for userinfo
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
`id` int(11) NOT NULL,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`age` int(11) NOT NULL,
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`gender` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`time` datetime NOT NULL,
`workNo` varchar(10) CHARACTER SET utf8 COLLATE utf8_croatian_ci NOT NULL,
`score` int(10) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES (0, '用户1', 33, '北京', '男', '2001-03-28 15:00:42', '00001', 100);
INSERT INTO `userinfo` VALUES (1, '用户2', 33, '南京', '男', '2002-03-10 15:00:53', '00002', 85);
INSERT INTO `userinfo` VALUES (2, '用户3', 23, '郑州', '女', '2003-03-16 15:00:56', '00003', 86);
INSERT INTO `userinfo` VALUES (3, '用户4', 58, '北京', '男', '2004-04-15 12:00:56', '00004', 88);
INSERT INTO `userinfo` VALUES (4, '用户5', 44, '北京', '女', '2005-03-02 15:01:07', '00005', 70);
INSERT INTO `userinfo` VALUES (5, '用户6', 45, '香港', '男', '2006-03-06 15:01:10', '00006', 50);
INSERT INTO `userinfo` VALUES (6, '用户7', 29, '香港', '男', '2007-12-16 15:01:13', '00007', 66);
INSERT INTO `userinfo` VALUES (7, '用户8', 33, '香港', '男', '2008-07-15 15:01:18', '00008', 60);
INSERT INTO `userinfo` VALUES (8, '用户9', 33, '上海', '女', '2009-03-03 15:01:22', '00009', 40);
INSERT INTO `userinfo` VALUES (9, '用户', 35, '香港', '男', '2010-03-26 15:01:25', '00010', 45);
INSERT INTO `userinfo` VALUES (10, '用户用户', 22, '上海', '男', '2011-03-27 15:49:12', '00011', 59);
SET FOREIGN_KEY_CHECKS = 1;