mysql语句

基本语句


/*创建数据库并指定字符集*/
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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值