2020.7.23英谷实训日志

函数的相关问题

首先奉上听课过程中记录的一些零碎东西~
函数相对查询来说还是相对容易的,类似于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

猜你喜欢

转载自blog.csdn.net/Aigtbb/article/details/107553548