文库网
关注排行榜

当前无数据...

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

(MySQL) 增删改查语句(详细)

1.创建练习表

  • 这里练习表没有满足三范式

第一范式(又称 1NF):保证每列的原子性
数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。
第二范式(又称 2NF):保证一张表只描述一件事情
满足1NF后要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。
第三范式(又称 3NF):保证每列都和主键直接相关
满足2NF后,要求:表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)。
数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a–>b–>c 属性之间含有这样的关系,是不符合第三范式的。

  • 五大约束

数据库中的五大约束包括:

1.主键约束(Primay Key Coustraint) 唯一性,非空性;

2.唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个;

3.默认约束 (Default Counstraint) 该数据的默认值;

4.外键约束 (Foreign Key Counstraint) 需要建立两表间的关系;

5.非空约束(Not Null Counstraint):设置非空约束,该字段不能为空。

五大约束的语法示例:

  1. 添加主键约束
    Alter table 表名 add Constraint 主键名 primary key(字段)

  2. 添加唯一约束
    Alter table 表名 add Constraint 约束名 unique(字段)

  3. 添加默认约束
    Alter table 表名 add Constraint 约束名 default(默认内容) for 字段名

  4. 添加检查约束
    Alter table 表名 add Constraint 约束名 check (字段表达)

  5. 添加外键约束
    Alter table 表名 add Constraint 约束名 foreign key(字段) references 表名(字段名)

1.1用户表(user)

  1. <code class="prism language-sql">CREATE TABLE `user`(
  2. `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户id(主键)',
  3. `username` VARCHAR(50) COMMENT '用户姓名',
  4. `age` CHAR(3) COMMENT '用户年龄'
  5. );
  6. </code>
复制代码
  • 插入数据
  1. <code class="prism language-sql">INSERT INTO USER VALUES(2,'小二',12);
  2. INSERT INTO USER VALUES(3,'张三',33);
  3. INSERT INTO USER VALUES(4,'李四',24);
  4. INSERT INTO USER VALUES(5,'王五',17);
  5. INSERT INTO USER VALUES(6,'赵六',36);
  6. INSERT INTO USER VALUES(7,'七七',18);
  7. </code>
复制代码
  • 完成后
    表名 user
    表数据:
    {tilte}-吹笛子的鹿

1.2学生表

  1. <code class="prism language-sql">CREATE TABLE `students`(
  2. `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '学生id(主键)',
  3. `name` VARCHAR(10) COMMENT '学生姓名',
  4. `grade` VARCHAR(10) COMMENT '学生年级',
  5. `chinese` INT COMMENT '语文成绩',
  6. `math` INT COMMENT '数学成绩',
  7. `english` INT COMMENT '英语成绩'
  8. );
  9. </code>
复制代码
  • 插入数据
  1. <code class="prism language-sql">INSERT INTO students VALUES(1,'迪丽热巴','二年级',100,100,100);
  2. INSERT INTO students VALUES(2,'古力娜扎','一年级',99,88,98);
  3. INSERT INTO students VALUES(3,'马尔扎哈','三年级',46,20,99);
  4. INSERT INTO students VALUES(4,'阿里巴巴','一年级',78,81,100);
  5. INSERT INTO students VALUES(5,'哈哈哈哈','六年级',20,10,5);
  6. INSERT INTO students VALUES(6,'作者本人','二年级',100,100,100);
  7. INSERT INTO students VALUES(7,'嘻嘻哈哈','五年级',70,99,60);
  8. INSERT INTO students VALUES(8,'哭哭啼啼','四年级',33,15,54);
  9. </code>
复制代码

列名或者表名和 MySQL 关键字冲突可以使用 ` 符号,键盘esc 下面,1 左边,Tab 上面;
注意 ==> 如果成绩类型是 varcher ,那使用排序将会显示不正确。

  • 完成后
    表名 students
    表数据:
    {tilte}-吹笛子的鹿

2.查询

2.1查询全部(这里使用user用户表)

  • Select * from 表名;
  1. <code class="prism language-sql">SELECT * FROM USER;
  2. </code>
复制代码

2.2查询已经成年的用户(使用where条件查询)

  • 条件中比较运算符:( 等于: = 大于: > 大于等于: >= 小于: < 小于等于: <= 不等于: != 或 <> )
  • Select * from 表名 where 条件;
  1. <code class="prism language-sql">SELECT * FROM USER WHERE age >= 18;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.3查询未成年用户的名字

  • SELECT 字段名 FROM 表名 WHERE 条件;
  1. <code class="prism language-sql">SELECT username FROM USER WHERE age < 18;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.4使用别名查询

  • 使用as关键字(as可以省略)
  1. <code class="prism language-sql">SELECT u.* FROM USER AS u;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.5使用逻辑运算符查询

  • 逻辑运算符( 并且:and 或 && 或:or 非:not 或 ! )
  • 查询名字为小二又年龄是12岁的(显示名字和年龄)
  1. <code class="prism language-sql">SELECT u.`username`,u.`age` FROM USER u WHERE u.`username`='小二' && u.`age`=12;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

  • 查询名字为张三又是未成年的(查询结果空,没有这个人)
  1. <code class="prism language-sql">SELECT * FROM USER WHERE username='张三' && age < 18;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.6使用运算符查询(这里开始使用students学生表)

{tilte}-吹笛子的鹿

  • 查询 哈哈哈哈 的三科总分
    运算符优先级:
    1.乘法和除法的优先级高于加法和减法
    2.同级运算的顺序是从左到右
    3.表达式中使用"括号"可强行改变优先级的运算顺序
    select 列1[ ±*/ ]列2 from 表名 where 条件;
  1. <code class="prism language-sql">SELECT s.chinese + s.math + s.english FROM students s WHERE s.name = '哈哈哈哈';
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.7范围查询(between 条件1 and 条件2)

(良 60-70,中70-80,优80-90,优秀90-100)

  • 查询语文成绩是 良到中 的同学名字

  • where 字段(列名) between 条件1 and 条件2;
  1. <code class="prism language-sql">SELECT NAME FROM students WHERE chinese BETWEEN 60 AND 80;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

  • 查询数学成绩不合格的同学名字

  • where 字段(列名)not between 条件1 and 条件2;
  1. <code class="prism language-sql">SELECT NAME FROM students WHERE math NOT BETWEEN 60 AND 100;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

  • 查询英语成绩优秀的同学id和名字;

  • where !( 字段名 between 条件1 and 条件2);
  1. <code class="prism language-sql">SELECT s.`id`,s.`name` FROM students s WHERE !(s.`english` BETWEEN 0 AND 90);
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.8集合查询

  • 查询一年级和二年级的学生信息
    where 列名 in (值1,值2,值3);
  1. <code class="prism language-sql">SELECT * FROM students WHERE grade IN ('一年级','二年级');
  2. </code>
复制代码

{tilte}-吹笛子的鹿

*查询一年级,二年级,三年级以外的学生信息
where 列名 not in (值1,值2,值3);

  1. <code class="prism language-sql">SELECT * FROM students WHERE grade NOT IN ('一年级','二年级','三年级');
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.9 NULL值查询

  • 注意:列中值为null不能使用=去查询
  • 查询名字为 null 的学生数据(没有存储有,所以啥也没有)
    where 列名 is null;
  1. <code class="prism language-sql">SELECT * FROM students WHERE `name` IS NULL;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.10模糊查询( like )

% 表示0个到n个字符
  1. <code class="prism language-sql">where 列名 like '%巴'; -- 表示以 巴 结尾的;
  2. where 列名 like '巴%'; -- 表示以 巴 开头的;
  3. where 列名 like '%巴巴%' -- 表示数据里面包含 巴巴 的;
  4. </code>
复制代码
  • 查询名字以 巴 结尾的学生;
  1. <code class="prism language-sql">SELECT * FROM students WHERE `name` LIKE '%巴';
  2. </code>
复制代码

{tilte}-吹笛子的鹿

  • 查询名字以 作者 开头的学生;
  1. <code class="prism language-sql">SELECT * FROM students WHERE `name` LIKE '作者%';
  2. </code>
复制代码

{tilte}-吹笛子的鹿

  • 查询名字里面包含 嘻哈 的学生;
  1. <code class="prism language-sql">SELECT * FROM students WHERE `name` LIKE '%嘻哈%';
  2. </code>
复制代码

{tilte}-吹笛子的鹿

_ 表示一个字符,可以多次使用
  • 查询名字里面倒数第二个字有 哈 的学生
    where 列名 like ‘哈_’;
  1. <code class="prism language-sql">SELECT * FROM students WHERE `name` LIKE '%哈_';
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.11结果排序

  • 对结果经行排序(对查询出的结果按照一列或多列进行升序或者倒序排序,升序式 ASC ,倒序式 DESC,默认升序)。
  • 注意不能使用中文或者中问别名排序。
    where 条件 order by 列名 [ ASC / DESC ];
  • 查询一年级,二年级,三年级学生数据,以 语文成绩排序,降序。
  1. <code class="prism language-sql">SELECT * FROM students WHERE grade IN ('一年级','二年级','三年级') ORDER BY chinese DESC;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

2.12分页查询

  • 分页查询( beginIndex 表示从第几条数据开始(也可以说是跳过前面多少页),第一页从0开始。pageSize 表示每页显示多少条数据);
    select * from 表名 where 条件 limit beginIndex , pageSize;

  • 分页算法公式 (当前页 - 1)* pageSize;

  • 比如说每页 10页 分页。
    第一页 limit 0,10; // 显示 0-10;跳过前面0条数据
    第二页 limit 10,10; // 显示 11-20;跳过前面10条数据
    第三页 limit 20,10; // 显示 21-30;跳过前面20条数据

  • 注意当我们使用 select * from students;(最后底层执行语句分页了 limit 0,1000 )

    {tilte}-吹笛子的鹿

  • 查询全部学生,每页三条数据
    第一页

  1. <code class="prism language-sql">SELECT * FROM students LIMIT 0,3;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

第二页

  1. <code class="prism language-sql">SELECT * FROM students LIMIT 3,3;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

第三页

  1. <code class="prism language-sql">SELECT * FROM students LIMIT 6,3;
  2. </code>
复制代码

{tilte}-吹笛子的鹿

3.增加

insert into 表名(字段1,字段2,字段3,…)values(值1,值2,值3,…);

  • 添加学生鸡鸡鸡鸡
  1. <code class="prism language-sql">INSERT INTO students(id,NAME,grade,chinese,math,english)
  2. VALUES( 9,'鸡鸡鸡鸡','七年级',77,77,77);
  3. </code>
复制代码

{tilte}-吹笛子的鹿

  • 其它插入方式
  1. <code class="prism language-sql">INSERT INTO 表名(字段1,字段2,字段3) VALUES (值1,值2,值3),(值1,值2,值3); -- 插入多条数据
  2. INSERT INTO 表名 VALUES(值1,值2); -- 针对表全字段进行插入操作
  3. INSERT INTO 表名(字段) SELECT 字段 FROM 表2; -- 查询结果插入
  4. INSERT INTO 表名 SELECT 字段 FROM 表2; -- 查询结果,全表插入
  5. </code>
复制代码

4.更新

  1. <code class="prism language-sql">update 表名 set 字段=值 where 条件; -- 带条件的去修改指定数据,否则修改全表;
  2. </code>
复制代码
  • 修改学生 ‘哈哈哈哈’ 的英语成绩为 10;
  1. <code class="prism language-sql">UPDATE students SET english = 10 WHERE `name` = '哈哈哈哈';
  2. </code>
复制代码

{tilte}-吹笛子的鹿

5.删除

  1. <code class="prism language-sql">delete from 表名 where 条件; -- 删除数据带条件删除,否则删除全表的数据
  2. </code>
复制代码
  • 删除学生 ‘鸡鸡鸡鸡’ ;
  1. <code class="prism language-sql">DELETE FROM students WHERE `name` = '鸡鸡鸡鸡';
  2. </code>
复制代码

{tilte}-吹笛子的鹿

{tilte}-吹笛子的鹿

6.语句执行顺序

  • from -> on -> join -> where -> group by -> having -> select -> distinct -> order by -> limit
END…

本站资源均由网上搜集或网友上传提供,内容仅供观摩学习交流之用,本站将不对任何资源负法律责任.如有侵犯您的版权,请及时联系我们(邮箱:892481490@qq.com,客服QQ:892481490),我们会尽快处理!QQ350550790是骗子,注意不要和他交易!!!
发帖求助前要善用【论坛搜索】功能, 那里可能会有你要找的答案,也能为你节约不少学习时间;
如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加(威望)和(贡献)而不会扣除自己的积分。
如发现灌水帖、病毒木马帖、广告帖、工具不能正常使用、网盘链接失效,请点击【举报】 核实有几率会给予额外的B币奖励哦!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    发布资源 快速回复 返回列表 客服中心 官方QQ群

    QQ|小黑屋|手机版|编程之家论坛 ( 桂ICP备18002029号 )

    Powered by 编程之家  © 20019-2021