第四章SQL语句之DML

第四章 SQL语句之DML && DQL

有关数据表的DML操作

INSERT 针对于数据的插入

DELETE 针对于数据的删除

UPDATE 针对于数据的修改

4.1 INSERT语句

INSERT INTO 表名 [(列名1,列名2,....)] VALUES (值1,值2,...);
默认情况下,一条插入命令只针对一行进行影响
​
INSERT INTO 表名 [(columnName,[columnName...])] VALUES (value[,value....]),(value[,value....]),(value[,value....]).....;
一次性插入多条记录
​
PS 如果我们为每一列都要指定注入的值,那么表名后面就不需要罗列插入的列名了
INSERT INTO 表名 VALUES (值1,值2,值3,....)
​
CREATE TABLE `grade`  (
  `GradeID` int(0) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
  `GradeName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '年级名称',
  PRIMARY KEY (`GradeID`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

4.2 REPLACE语句

replace语句的语法格式有三种语法格式。
​
语法格式1:
replace into 表名 [(字段列表)] values (值列表);
语法格式2:
replace [into] 目标表名[(字段列表1) select (字段列表2) from 源表 [where 条件表达式];
语法格式3:                    
replace [into] 表名 set 字段1=值1, 字段2=值2;

REPLACE与INSERT语句区别:

replace语句的功能与insert语句的功能基本相同,不同之处在于:使用replace语句向表插入新记录时,如果新记录的主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。

使用replace的最大好处就是可以将delete和insert合二为一(效果相当于更新),形成一个原子操作,这样就无需将delete操作与insert操作置于事务中了

4.3 DELETE语句 || TRUNCATE语句

DELETE (TRUNCATE) FROM 表名 [WHERE 条件];

DELETE:删除数据,保留表结构,必要时可以回滚,但是如果数据量较大,运行速度不及TRUNCATE。

TRUNCATE:删除所有数据,保留表结构,不能够回滚。一次全部删除所有数据,速度相对很快。

DROP:删除数据和表结构,删除速度最快。

4.4 UPDATE数据

UPDATE 表名 SET 列名 = 值 [,列名 = 值,列名 = 值,列名 = 值,...] [WHERE 条件];

4.5 核心资料

1:建库 MySchool_db
CREATE DATABASE Myschool_db;
2:建表(先主后从)
2.1创建年级表
CREATE TABLE grade(
    GradeID INT  NOT NULL AUTO_INCREMENT COMMENT '年级编号',
    GradeName VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '年级名称',
    PRIMARY KEY (GradeID)
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
​
2.2创建科目表
DROP TABLE IF EXISTS subject;
CREATE TABLE subject  (
  SubjectNo int NOT NULL AUTO_INCREMENT COMMENT '课程编号',
  SubjectName varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课程名称',
  ClassHour int NULL DEFAULT NULL COMMENT '学时',
  GradeID int NULL DEFAULT NULL COMMENT '年级编号',
  PRIMARY KEY (SubjectNo)
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
​
2.3创建学生表
DROP TABLE IF EXISTS student;
CREATE TABLE student  (
  StudentNo int(0) NOT NULL COMMENT '学号',
  LoginPwd varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  StudentName varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
  Sex tinyint(1) NULL DEFAULT NULL COMMENT '性别,取值0或1',
  GradeId int(0) NULL DEFAULT NULL COMMENT '年级编号',
  Phone varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话,允许为空,即可选输入',
  Address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址,允许为空,即可选输入',
  BornDate datetime(0) NULL DEFAULT NULL COMMENT '出生时间',
  Email varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱账号,允许为空,即可选输入',
  IdentityCard varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (StudentNo) USING BTREE,
  UNIQUE INDEX IdentityCard(IdentityCard) USING BTREE,
  INDEX Email(Email) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
​
2.4创建成绩表
CREATE TABLE `result`  (
  `StudentNo` int(0) NOT NULL COMMENT '学号',
  `SubjectNo` int(0) NOT NULL COMMENT '课程编号',
  `ExamDate` datetime(0) NOT NULL COMMENT '考试日期',
  `StudentResult` int(0) NOT NULL COMMENT '考试成绩',
  INDEX `SubjectNo`(`SubjectNo`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
​
​
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>注入年级数据
INSERT INTO `grade` VALUES (1, '大一');
INSERT INTO `grade` VALUES (2, '大二');
INSERT INTO `grade` VALUES (3, '大三');
INSERT INTO `grade` VALUES (4, '大四');
INSERT INTO `grade` VALUES (5, '预科班');
INSERT INTO `grade` VALUES (6, '幼儿园');
INSERT INTO `grade` VALUES (7, '老年大学');
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>注入科目数据
INSERT INTO `subject` VALUES (1, '高等数学-1', 110, 1);
INSERT INTO `subject` VALUES (2, '高等数学-2', 110, 2);
INSERT INTO `subject` VALUES (3, '高等数学-3', 100, 3);
INSERT INTO `subject` VALUES (4, '高等数学-4', 130, 4);
INSERT INTO `subject` VALUES (5, 'C语言-1', 110, 1);
INSERT INTO `subject` VALUES (6, 'C语言-2', 110, 2);
INSERT INTO `subject` VALUES (7, 'C语言-3', 100, 3);
INSERT INTO `subject` VALUES (8, 'C语言-4', 130, 4);
INSERT INTO `subject` VALUES (9, 'JAVA第一学年', 110, 1);
INSERT INTO `subject` VALUES (10, 'JAVA第二学年', 110, 2);
INSERT INTO `subject` VALUES (11, 'JAVA第三学年', 100, 3);
INSERT INTO `subject` VALUES (12, 'JAVA第四学年', 130, 4);
INSERT INTO `subject` VALUES (13, '数据库结构-1', 110, 1);
INSERT INTO `subject` VALUES (14, '数据库结构-2', 110, 2);
INSERT INTO `subject` VALUES (15, '数据库结构-3', 100, 3);
INSERT INTO `subject` VALUES (16, '数据库结构-4', 130, 4);
INSERT INTO `subject` VALUES (17, 'C#基础', 130, 1);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>注入学生数据
INSERT INTO `student` VALUES (1000, '111111', '郭靖', 1, 1, '13500000001', '北京海淀区中关村大街1号', '1986-12-11 00:00:00', 'test1@openlab.cn', '450323198612111234');
INSERT INTO `student` VALUES (1001, '123456', '李文才', 1, 2, '12345678901', '广东广州天河区', '1981-12-31 00:00:00', 'test1@openlab.cn', '450323198112311234');
INSERT INTO `student` VALUES (1002, '111111', '李斯文', 1, 1, '13500000003', '天津市和平区', '1986-11-30 00:00:00', 'test1@openlab.cn', '450323198611301234');
INSERT INTO `student` VALUES (1003, '123456', '武松', 1, 3, '13500000004', '上海市金桥区', '1986-12-31 00:00:00', 'test1@openlab.cn', '450323198612314234');
INSERT INTO `student` VALUES (1004, '123456', '张三', 1, 4, '13500000005', '北京市通州', '1989-12-31 00:00:00', 'test1@openlab.cn', '450323198612311244');
INSERT INTO `student` VALUES (1005, '123456', '张秋丽 ', 2, 1, '13500000006', '广西桂林市灵川', '1986-12-31 00:00:00', 'test1@openlab.cn', '450323198612311214');
INSERT INTO `student` VALUES (9527, '888999', '赵尧林', 1, 1, '19988887777', '西安市雁塔区新家坡3号楼', '2000-01-01 00:00:00', 'zhaoyaolin@163.com', '610101200002029988');
INSERT INTO `student` VALUES (1007, '111111', '欧阳峻峰', 1, 1, '13500000008', '北京东城区', '1986-12-31 00:00:00', NULL, '450323198612311133');
INSERT INTO `student` VALUES (1008, '111111', '梅超风', 1, 1, '13500000009', '河南洛阳', '1986-12-31 00:00:00', NULL, '450323198612311221');
INSERT INTO `student` VALUES (1028, '111111', '赵敏', 1, 3, '13955556666', '西安市雁塔区', NULL, NULL, NULL);
INSERT INTO `student` VALUES (8080, '123123', '李寻欢', 1, 1, '13677778888', '西安市碑林区', '2005-05-01 00:00:00', 'litian@qq.com', '610101200505019900');

4.6 SELECT 语句(DQL数据查询语言)

基础语法

SELECT {*,列名,函数} 
FROM 表名 
[WHERE 条件];
​
​
说明:
-SELECT检索关键字  *匹配所有列  ,  匹配指定列  
-FROM  所提供的数据源(表,视图,另一个查询机制反馈的结果)
-WHERE 条件(控制查询的区域)
​
SELECT *
FROM student;                       #查询学生表的所有列以及所有行  ====>  学生表的全部信息
​
SELECT StudentName,Address,Email    #查询指定三列的内容所有行 ====> 学生表的姓名 住址  邮箱
FROM student;
​
SELECT StudentName,Address,Email    #查询指定三列的内容指定行 ====> 学生表的姓名 住址  邮箱  
FROM student
WHERE sex = 0;
​
#结论   SELECT 关键字 和 FROM 关键字之间  写的东西 控制的是我们结果的列数
#       WHERE 写的东西 控制的是我们结果的行数
​
#生日在2000-01-01  2010-01-01 的男生 的 姓名
SELECT StudentName
FROM student
WHERE BornDate>'2000-01-01' AND BornDate<'2010-01-01' AND sex = 1;

SELECT 语句中的算数表达式

对数值型数据列、变量、常量可以使用算数操作符创建表达式(+ - * /)
对日期型数据列、变量、常量可以使用部分算数操作符创建表达式(+ -)
运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算。
SELECT 100+80;
SELECT '300'+80;  #只要其中一个是数值类型,而另一个能够转成数值,则自动转换并计算
SELECT 'ABC'+20;  #若转换不成功,则将其认为是数字0对待
SELECT 'Hello'+'World';#若转换不成功,则将其认为是数字0对待  
SELECT NULL+80; #只要有一个为NULL,则结果为NULL

运算符优先级

乘除优先级高于加减
同级运算时运算顺序由左到右
表达式内使用括号,可以改变优先级的运算顺序
SELECT * 
FROM subject;
+-----------+-------------------+-----------+---------+
| SubjectNo | SubjectName       | ClassHour | GradeID |
+-----------+-------------------+-----------+---------+
|         1 | 高等数学-1        |       110 |       1 |
|         2 | 高等数学-2        |       110 |       2 |
|         3 | 高等数学-3        |       100 |       3 |
|         4 | 高等数学-4        |       130 |       4 |
|         5 | C语言-1           |       110 |       1 |
|         6 | C语言-2           |       110 |       2 |
|         7 | C语言-3           |       100 |       3 |
|         8 | C语言-4           |       130 |       4 |
|         9 | JAVA第一学年      |       110 |       1 |
|        10 | JAVA第二学年      |       110 |       2 |
|        11 | JAVA第三学年      |       100 |       3 |
|        12 | JAVA第四学年      |       130 |       4 |
|        13 | 数据库结构-1      |       110 |       1 |
|        14 | 数据库结构-2      |       110 |       2 |
|        15 | 数据库结构-3      |       100 |       3 |
|        16 | 数据库结构-4      |       130 |       4 |
|        17 | C#基础            |       130 |       1 |
+-----------+-------------------+-----------+---------+
​
SELECT SubjectName,ClassHour,ClassHour*10+10
FROM subject;
​
SELECT SubjectName,ClassHour,ClassHour*(10+10)
FROM subject;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值