day03-MySQL基础知识02

MySQL基础知识02

4.CRUD

数据库CRUD语句:增(create)、删(delete)、改(update)、查(Retrieve)

  1. Insert 语句 (添加数据)
  2. Update 语句(更新数据)
  3. Delete 语句(删除数据)
  4. Select 语句 (查找数据)

指对数据库中表记录的操作(DML 操作)

注意:

alter属于DDL,用来修改基本表,是对表的结构进行操作,比如对字段增加,删除,修改类型;

DML 操例,如update是用来修改表中的数据,修改某一行某一列的值

对行是数据操纵DML(update),对列是数据定义DDL(alter)

4.1Insert语句

  • 使用INSERT 语句向表中插入数据
INSERT INTO tablename [(column [,column ...])]
VALUES  (value[, value...]);

例子

  1. 创建一商品表goods(id int, goods_name varchar(10),price double);
  2. 添加两条记录
练习insert语句
-- 1. 创建一商品表goods(id int, goods_name varchar(10),price double);
CREATE TABLE goods(
    id INT,
    goods_name VARCHAR(10),
    price DOUBLE)

-- 2. 添加两条记录
INSERT INTO goods (id,goods_name,price)
    VALUES(10,'华为手机',2000);

INSERT INTO goods (id,goods_name,price)
    VALUES(20,'苹果手机',3000);

SELECT * FROM goods;

day03-MySQL基础知识02
  • INSERT语句注意事项

细节说明:

  1. 插入的数据应该与字段的数据类型相同,比如把 ‘abc’ 添加到 int 类型会错误
  2. 数据的长度应在列的规定范围之内,例如:不能将一个长度为80的字符串加入到长度为40的列中
  3. 在values中列出的数据位置必须与被加入的列的排列位置对应
  4. 字符和日期型数据应包含在单引号中
  5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)
  6. insert into table_name(列名…) values (),(),() 形式添加多条记录
  7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
  8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错 如果某个列没有指定not null,那么当添加数据时,没有给定值,则会默认给null 如果我们希望指定某个默认值,可以在创建表时指定
-- - INSERT语句注意事项
-- 细节说明:
-- 1. 插入的数据应该与字段的数据类型相同
INSERT INTO goods VALUES('北京','小米手机',2000)-- 失败,id对应的列类型是int

-- 2. 数据的长度应在列的规定范围之内,例如:不能将一个长度为80的字符串加入到长度为40的列中
INSERT INTO goods VALUES(40,'vovo手机vovovovo手机vovovovo手机vovo',2000)-- 失败

-- 3. 在values中列出的数据位置必须与被加入的列的排列位置对应
INSERT INTO goods (goods_name,id,price)-- 成功,即使改变了列属性的位置,只要值是对应的,就ok
    VALUES('vivo手机',50,1800)

-- 4. 字符和日期型数据应包含在单引号中
INSERT INTO goods VALUES(60,小米手机,2000)-- 失败,字符串应该加上单引号

-- 5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)
INSERT INTO goods (id,goods_name,price)
    VALUES(11,'boluo手机',NULL)-- 成功,该字段允许为空

-- 6. insert into table_name(列名...) values (),(),() 形式添加多条记录
INSERT INTO goods VALUES(13,'三星手机',2300),(14,'四星手机',2300)-- ok

-- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
INSERT INTO goods (id) VALUES(66); -- ok,指定了字段

-- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
    -- 如果某个列没有指定not null,那么当添加数据时,没有给定值,则会默认给null
INSERT INTO goods (id,goods_name)
    VALUES(88,'格力手机');-- 这里的price默认设为null
SELECT * FROM goods;

-- 如果我们希望指定某个默认值,可以在创建表时指定
-- 例如
CREATE TABLE goods2 (
    id INT ,
    goods_name VARCHAR(10),
    price FLOAT NOT NULL DEFAULT 100);
INSERT INTO goods2 (id,goods_name) VALUES(1,'大西瓜手机');
SELECT * FROM goods2;

goods表:

day03-MySQL基础知识02

goods2表:

day03-MySQL基础知识02

4.2Update语句

  • 语法:
UPDATE tab_name
    SET col_name1=expr1[, col_name2=expr2...]
    [WHERE where_definition]

例子

要求:在上面创建的epm表中修改表中的记录

  1. 将所有员工的薪水改为5000元
  2. 将姓名为’小妖怪’的员工薪水改为3000元
  3. 将老妖怪的薪水在原有的基础上加1000元
-- 要求:在上面创建的epm表中修改表中的记录
SELECT * FROM emp

-- 1. 将所有员工的薪水改为5000元
UPDATE emp SET salary = 5000

-- 2. 将姓名为'小妖怪'的员工薪水改为3000元
UPDATE emp SET salary = 3000 WHERE user_name = '小妖怪'

-- 3. 将老妖怪的薪水在原有的基础上加1000元
INSERT INTO emp
    VALUES(200,'老妖怪','1990-1-1','2004-4-12 12:22:09','捶背的',5000,'给大王捶背','111')

 UPDATE emp
    SET salary = salary + 1000, job='出主意的'
    WHERE user_name = '老妖怪'

day03-MySQL基础知识02
  • 使用细节

  • UPDATE 语法可以用新值更新原有表行中的各列

  • set子句指示要修改哪些列和要给予哪些值
  • WHERE子句指定应更新哪些行,如果没有WHERE子句,则更新所有的记录。因此要慎用
  • 如果需要修改多个字段,可以通过set字段1=值1,字段2=值2…

4.3Delete语句

  • 语法
delete from tbl_name
        [WHERE where_definition]

例子

-- delete语句演示
-- 删除表中名称为'老妖怪'的记录
DELETE FROM emp WHERE user_name ='老妖怪'

-- 删除表中所有记录
DELETE FROM emp

SELECT * FROM emp

day03-MySQL基础知识02
  • 使用细节

  • 如果不使用子句,将删除表中所有数据

  • delete语句不能删除某一列的值(可使用update设为null或者 ”)
  • 使用delete语句仅删除记录,不删除表本身。如果要删除表,使用drop 语句: drop table 表名;

4.4Select语句(单表)

4.4.1基本查询

SELECT [DISTINCT] * |{column1,column2,column3..}
    FROM table_name;
  • 注意事项

  • select指定查询哪些列的数据

  • column指定列名
  • *号代表查询所有列
  • from指定查询哪张表
  • distinct可选,指显示结果时,是否去掉重复数据

课堂练习

  1. 查询表中所有学生的信息
  2. 查询表中所有学生的姓名对应的英语成绩
  3. 过滤表中的重复数据distinct
  4. 要过滤的记录,每个字段都相同才会去重
CREATE TABLE student (
    id INT NOT NULL DEFAULT 1,
    name VARCHAR(20) NOT NULL DEFAULT '',
    chinese FLOAT NOT NULL DEFAULT 0.0,
    english FLOAT NOT NULL DEFAULT 0.0,
    math FLOAT NOT NULL DEFAULT 0.0
);

-- 先插入数据
INSERT INTO student(id,name,chinese,english,math)
    VALUES(1,'张飞',89,78,90),
        (2,'宋江',67,98,56),
        (3,'关羽',87,78,77),
        (4,'赵云',88,98,90),
        (5,'欧阳锋',55,85,45),
        (6,'黄蓉',75,65,30),
        (7,'刘备',98,57,88)

-- 1. 查询表中所有学生的信息
SELECT * FROM student;
-- 2. 查询表中所有学生的姓名对应的英语成绩
SELECT name,english FROM student
-- 3. 过滤表中的重复数据distinct
SELECT DISTINCT english FROM student;
-- 4. 要过滤的记录,(要查询的)每个字段都相同才会去重

4.4.2使用表达式对查询的列进行运算

SELECT *|{ column1|expression, column2|expression, ...}
    FROM tablename;
  • 在select语句中可使用as语句
SELECT column_name as 别名 from 表名;

练习

  1. 统计每个学生的总分
  2. 给所有学生总分加10分
  3. 使用别名表示学生分数
-- 1. 统计每个学生的总分
SELECT name,(chinese+english+math) FROM student;

-- 2. 给所有学生总分加10分
SELECT name,(chinese+english+math+10) FROM student;

-- 3. 使用别名表示学生分数
SELECT name AS 名字,(chinese+english+math) AS total FROM student;

day03-MySQL基础知识02

4.4.3在where子句中经常使用的运算符

使用wher子句进行 过滤查询

day03-MySQL基础知识02

练习1

-- 1. 查询姓名为赵云的学生的成绩
SELECT * FROM Student
    WHERE name = '赵云'

-- 2. 查询英语成绩大于90分的同学
SELECT * FROM Student
    WHERE english > 90

-- 3. 查询总分大于200分的所有同学
SELECT * FROM Student
    WHERE (chinese + english + math) > 200

-- 4. 查询math大于60且id大于4的学生成绩
SELECT * FROM student
    WHERE math > 60 AND id > 4

-- 5. 查询英语成绩大于语文成绩的同学
SELECT * FROM student
    WHERE math > chinese

-- 6. 查询总分大于200分的,且数学成绩小于语文成绩的姓宋的同学
-- 宋% 表示名字以宋开头的
SELECT * FROM student
    WHERE (chinese + english + math) > 200
    AND math < chinese
    AND name LIKE '宋%'

练习2

-- 查询英语成绩分数在80-90之间的同学
SELECT * FROM student
    WHERE english BETWEEN 80 AND 90

-- 查询数学成绩分数为89,90,91之间的同学(也可以用or)
SELECT * FROM student
    WHERE math IN(89,90,91)

-- 查询所有姓宋的学生的成绩
SELECT * FROM student
    WHERE name LIKE '宋%'

-- 查询数学分数大于80,语文分大于80的同学
SELECT * FROM student
    WHERE math > 80 AND chinese >80

练习3

-- 查询语文在70到80之间的同学
SELECT * FROM student
    WHERE  chinese =70

-- 查询总分为189,190,191的同学
SELECT * FROM student
    WHERE (chinese + english + math) IN (189,190,191)

-- 查询所有姓李或姓宋的学生的成绩
SELECT * FROM student
    WHERE name LIKE '宋%' OR name LIKE '李%'

-- 查询数学比语文多10分的同学
SELECT * FROM student
    WHERE  chinese = math+10

4.4.4使用order by 子句排序查询结果

SELECT column1,column2,column3...
    FROM table;
    order by column asc|desc,...

  1. order by 指定排序的列,排序的列既可以是表中的列名,也可以是select语句后指定的列名
  2. asc升序(默认),desc降序
  3. order by子句应位于select语句的结尾

练习

-- 对数学成绩排序后输出(升序)
SELECT * FROM student
    ORDER BY math

-- 对总分按从高到低的顺序输出
SELECT name,(chinese + math +english)AS total FROM student
    ORDER BY total descd

-- 对姓张的学生成绩排序输出(升序)
INSERT INTO student(id,name,chinese,english,math)
    VALUES(8,'张三',65,45,99)

SELECT name,(chinese + math +english)AS total FROM student
    WHERE name LIKE '张%'
    ORDER BY total

Original: https://www.cnblogs.com/liyuelian/p/16749704.html
Author: 一刀一个小西瓜
Title: day03-MySQL基础知识02

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598542/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 电脑卡.磁盘占用100% .解惑找不到Superfetch等服务问题

    公司电脑没有固态。磁盘io比较慢. 经常打满100% *1. 打开任务管理器发现是 一个叫system和DCFWinService的服务一直在占用磁盘读写 2. 解决方向. 禁用掉…

    数据库 2023年6月14日
    0692
  • proxySQL with MGR

    环境信息 hostname IP port role comm ms81 192.168.188.81 3399 master ms82 192.168.188.82 3399 s…

    数据库 2023年6月16日
    084
  • MySQL45讲之备库并行复制策略

    前言 本文主要介绍 MySQL 备库的并行复制策略。 为什么备库需要并行复制 如果主数据库有大量的更新操作,因为主数据库可以并发写入,而从数据库只能在单个线程中执行,那么从数据库的…

    数据库 2023年5月24日
    086
  • Java中的线程安全与线程同步

    1.为什么需要线程同步 什么是线程安全:指在 被多个线程访问时,程序可以 持续进行正确的处理。 1.1.线程安全问题 案例:通过抢优惠例子说明线程安全问题 public class…

    数据库 2023年6月6日
    096
  • PostgreSQL 和 MySQL 在用途、好处、特性和特点上的异同

    PostgreSQL 和 MySQL 在用途、好处、特性和特点上的异同。 PostgreSQL 和 MySQL 是将数据组织成表的关系数据库。这些表可以根据每个表共有的数据链接或关…

    数据库 2023年5月24日
    0109
  • 史上最全面的mysql数据库下载安装教程(适合初学者)

    Original: https://www.cnblogs.com/chaichaichai/p/15330533.htmlAuthor: 牛仔码农Title: 史上最全面的mys…

    数据库 2023年5月24日
    0101
  • 正则表达式与SQL

    在我心中正则表达式和SQL就是一样的东西。 SQL是结构化查询语言,是根据某个查询、修改规则来查询修改数据,是描述一个规则给数据库,数据库来执行,数据库返回结果,过程不需要考虑,不…

    数据库 2023年6月9日
    075
  • MySql 删除数据表

    定义: 删除数据表就是将数据库中已经存在的表从数据库中删除。注意,在删除表的同时,表的定义和表中所有的数据均会被删除。因此,在进行删除操作前,最好对表中的数据做一个备份,以免造成无…

    数据库 2023年6月14日
    084
  • 大连交通大学课程共享

    如本页面访问适配不佳,阅读体验不好可访问公众号页面(适配更好)。公众号页面:https://mp.weixin.qq.com/s/5g2-Izrygm6WhKiT3z1yow 设立…

    数据库 2023年6月11日
    082
  • 如何写出有效的单元测试

    测试不要名不副实避免测试的描述与测试内容不符;测试结果必须精准;测试该失败的时候一定要失败! 测试私有或者受保护的方法解决思路: 将方法变成公共方法; 将方法抽取到新类; 将方法变…

    数据库 2023年6月14日
    0104
  • springmvc静态资源配置

    <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>o…

    数据库 2023年6月16日
    097
  • 草图?不管黑猫白猫,能把你的设计理念讲清楚才行

    我在日常工作中,经常要参加一些技术活动,或被拉去参加一些需求会或运营会,时间比较分散。 上周在参加一个代码评审时,发现程序上该复用的没有复用,却写了两份逻辑几乎相同的代码。另外,还…

    数据库 2023年6月9日
    080
  • 汇编实验十编写子程序

    第一题,显示字符串,8行3列显示Welcome to masm! assume cs:codedata segmentdb ‘Welcome to masm!&#821…

    数据库 2023年6月11日
    081
  • mysql配置环境变量

    安装MySQL 5.6,0.28 官网下载解压即可 下载后解压 然后以管理身份打开 my.ini配置(得先配置) bin>mysqld –initialize-i…

    数据库 2023年6月9日
    092
  • 线程池:ThreadPoolExcutor源码阅读

    ThreadPoolExcutor源码流程图:(图片较大,下载再看比较方便) 线程池里的二进制奥秘 前言: 线程池的五种状态state (RUNNING 、SHUTDOWN 、ST…

    数据库 2023年6月16日
    0119
  • HTTP 协议概述

    什么是 HTTP 协议 什么是协议? 协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议。所谓 HTTP 协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的…

    数据库 2023年6月11日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球