函数的相关问题
首先奉上听课过程中记录的一些零碎东西~
函数相对查询来说还是相对容易的,类似于Java的方法,
分类分为分组函数和单行函数
分组函数举例:max min avg… …
单行函数举例:length()
instr 获取子串第一次出现的索引,索引从1开始,如果找不到返回0
trim是去掉前后空格的,括号内的空格是不去掉的
字符函数
#一、字符函数
#length 获取字节长度
unicode:固定字节,一个字母和一个汉字都占2个字节
gbk:一个字母占一个字节,一个汉字占2个字节
utf8:一个字母占一个字节,一个汉字占3个字节
数学函数
(引用刘老师的笔记)
向上取整,返回>=该参数的最小整数
SELECT CEIL(-1.0);
向下取整,返回<=该参数的最大整数
SELECT FLOOR(-1.0);
四舍五入,先按绝对值四舍五入,然后加正负号
SELECT ROUND(-1.56);
SELECT ROUND(1.537,1);
随机数,返回0-1之间的小数,不包含1
SELECT RAND();
返回50-100 a——b floor(rand()*(b-a+1)+a)
SELECT CEIL(RAND()*50+50);
SELECT FLOOR(RAND()*51+50);
截断
SELECT TRUNCATE(1.99,1);
日期函数
获取当前日期
SELECT NOW();
获取日期,没有时间
SELECT CURDATE();
获取时间,没有日期
SELECT CURTIME();
获取日期的指定部分
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW());
SELECT DAY(NOW());
SELECT CONCAT(YEAR(NOW()),‘年’,MONTH(NOW()),‘月’,DAY(NOW()),‘日’) 日期;
判断两个日期的差别天数,前者比后者大,返回正数,小返回负数,相等返回0.
SELECT DATEDIFF(NOW(),‘2022-8-8’);
SELECT DATEDIFF(‘2017-9-25’,NOW());
需要注意的是,后者年份大的话运行出来显示的是负数,道理跟2-3一样
流程控制类函数
1、if函数
SELECT IF(100>9,‘不错呦’,‘不够大’) 备注;
2、case语句
#语法:
#CASE
#WHEN 条件1 THEN 显示的值1
#WHEN 条件2 THEN 显示的值2
#…
#ELSE 显示的值n
#END
#案例:
SELECT salary,
CASE
WHEN salary>20000 THEN ‘购买汽车’
WHEN salary>10000 THEN ‘购买手机’
WHEN salary>5000 THEN ‘购买pad’
ELSE ‘购买棒棒糖’
END 购买资格
FROM employees;
3、case语句
#语法:
#CASE 字段或表达式
#WHEN 值1 THEN 显示的值1
#WHEN 值2 THEN 显示的值2
#…
#ELSE 显示的值n
#END
#类似于:
#switch(变量或表达式){
#CASE 值1 :语句1;break;
#…
#DEFAULT:语句n;break;
#}
#案例:查询部门和对应的级别
SELECT department_id,
CASE department_id
WHEN 10 THEN ‘A’
WHEN 20 THEN ‘B’
WHEN 30 THEN ‘C’
WHEN 50 THEN ‘D’
END 级别
FROM employees;
插入数据
SQL 里面的
DML语言(数据操控语言)insert、update、delete
特点:
1、字段和值列表必须一一对应
2、字符型和日期型必须用单引号引起来
3、字段的顺序可以和表中字段的顺序不一致
4、不可以为NULL的字段,必须插入值,比如说主键id;可以为NULL的字段,可以不用插入值,使用NULL来代替,或字段名和值都不写
5、字段和值的个数必须一致
6、字段列表可以省略,默认所有列 ,而且顺序和表中的列的顺序一致
数据删除
方式一语法:
DELETE FROM 表 [WHERE 条件]
注意:where条件一定一定要加上
方式二语法:
TRUNCATE TABLE 表名
**#二种删除方式的区别【面试题】**
#1、TRUNCATE不能加WHERE条件,而DELETE可以加WHERE
#2、TRUNCATE效率较高
#3、TRUNCATE不能删除多表,而DELETE可以
#4、删除带标识列字段的表时,TRUNCATE 删除后再插入,标识列的值从1开始
#DELETE删除后再插入,标识列的值从断点处开始
#5、TRUNCATE删除后,不能回滚;DELETE删除可以回滚
DML数据操作练习
以下内容全部转自英谷教育刘峰吉老师的文档
#1. 运行以下脚本创建表my_employees
CREATE TABLE my_employees(
Id INT(10),
First_name VARCHAR(10),
Last_name VARCHAR(10),
Userid VARCHAR(10),
Salary DOUBLE(10,2)
);
CREATE TABLE users(
id INT,
userid VARCHAR(10),
department_id INT
);
#2.显示表my_employees的结构
DESC my_employees;
#3. 向my_employees表中插入下列数据
#ID FIRST_NAME LAST_NAME USERID SALARY
#1 patel Ralph Rpatel 895
#2 Dancs Betty Bdancs 860
#3 Biri Ben Bbiri 1100
#4 Newman Chad Cnewman 750
#5 Ropeburn Audrey Aropebur 1550
#方式一
INSERT INTO my_employees VALUES
(1,‘patel’,‘Ralph’,‘Rpatel’,895),
(2,‘Dancs’,‘Ralph’,‘Rpatel’,895),
(3,‘Biri’,‘Ralph’,‘Rpatel’,895),
(4,‘Newman’,‘Ralph’,‘Rpatel’,895),
(5,‘Ropeburn’,‘Ralph’,‘Rpatel’,895)
#方式二
INSERT INTO my_employees
SELECT 100,‘patel’,‘Ralph’,‘Rpatel’,895 UNION ALL
SELECT 100,‘patel’,‘Ralph’,‘Rpatel’,895 UNION ALL
SELECT 100,‘patel’,‘Ralph’,‘Rpatel’,895 UNION ALL
SELECT 100,‘patel’,‘Ralph’,‘Rpatel’,895
SELECT * FROM my_employees;
#4. 向users表中插入数据
#1 Rpatel 10
#2 Bdancs 10
#3 Bbiri 20
#4 Cnewman 30
#5 Aropebur 40
INSERT INTO users
VALUES
(1,‘Rpatel’,10),
(2,‘Bdancs’,10),
(3,‘Bbiri’,20),
(4,‘Cnewman’,30),
(5,‘Aropebur’,40)
#5. 将3号员工的last_name修改为“drelxer”
UPDATE my_employees
SET last_name=‘drelxer’
WHERE id = 3;
#6. 将所有工资少于900的员工的工资修改为1000
UPDATE my_employees SET salary=1000
WHERE salary<900;
#7. 将userid 为Bbiri的user表和my_employees表的记录全部删除
DELETE u,m
FROM users u,my_employees m
WHERE u.‘userid’=m.‘userid’
AND u.‘userid’=‘Bbiri’;
#8. 删除所有数据
DELETE FROM users;
DELETE FROM my_employees;
#9. 检查所作的修正
SELECT * FROM users;
SELECT * FROM my_employees;
#10. 清空表my_employees
TRUNCATE TABLE users;
TRUNCATE TABLE my_employees;
库和表的管理
#DDL数据定义语言
关键词
create、alter、drop
库的操作:创建库(★)、删除库
表的操作:创建表(★)、修改表、删除表(★)、复制表
#一、库的操作
SHOW DATABASES;
#1.创建库
CREATE DATABASE student;
CREATE DATABASE IF NOT EXISTS student;
#2.删除库
DROP DATABASE student;
DROP DATABASE IF EXISTS student;
#二、表的操作
#1.创建表
#语法:
#CREATE TABLE 表名(
#字段名 字段类型【(长度)】 【约束】,
#字段名 字段类型【(长度)】 【约束】,
#字段名 字段类型【(长度)】 【约束】,
#字段名 字段类型【(长度)】 【约束】
#案例:创建学员信息表
#学号、姓名、性别、邮箱、生日
CREATE TABLE stuinfo(
stuNo INT,#学号
stuName VARCHAR(20),#姓名
gender CHAR(1),#性别
email VARCHAR(50),#邮箱
borndate DATETIME #生日
)
SHOW TABLES;
DESC stuinfo;
#2.修改表
#①修改表名
ALTER TABLE stuinfo RENAME TO student;
ALTER TABLE student RENAME stuinfo;
尖叫提示:to 是可以省略的
#②修改列名,不加类型 报错,需要加类型
ALTER TABLE stuinfo CHANGE COLUMN borndate birthday DATETIME;
ALTER TABLE stuinfo CHANGE COLUMN birthday borndate ; ×
change
#③修改列的类型
ALTER TABLE stuinfo MODIFY COLUMN gender VARCHAR(2);
#④添加新列
ALTER TABLE stuinfo ADD COLUMN phone VARCHAR(11);
#⑤删除列
ALTER TABLE stuinfo DROP COLUMN phone;
#3.删除表
DROP TABLE stuinfo;
DROP TABLE IF EXISTS stuinfo;
SHOW TABLES;
#4.表的复制
INSERT INTO stuinfo VALUES(2,‘少杰’,‘男’,’’,NOW());
SELECT * FROM stuinfo;
#①仅仅复制表的结构
CREATE TABLE newTable2 LIKE stuinfo;
#②复制表的结构+数据
CREATE TABLE newTable3
SELECT * FROM stuinfo;
CREATE TABLE newTable4
SELECT stuno,stuname
FROM stuinfo WHERE stuno=1;
数据类型不做过多阐述
需要注意的是一些基础的东西,不能记乱了,在这里整理一下:
1PB = 1024TB
1TB = 1024 GB
1GB = 1024 MB
1MB = 1024 KB
1KB = 1024 B
1B = 8 Bit
1B = 1个字节
1个字节 = 8Bit