Mysql语法基础(CRUD)

新增数据(create)

insert into table_name values (value1),(value2)...;
  • insert into : 关键字
  • table_name:需要插入的表的名字
  • values : 后面跟所需要插入不同数量的数据,每一个括号就代表的时插入表的一行数据,其中的数据需要对应表的数据类型

查询数据(Retrieve)

全列查询

select * from table_name;
  • select :查询的关键字
  • *:通识符,表示当前表的所有的列
  • from :表示从什么表查询

查询结果是一个二维表,包含了列名和每一行的数据

同时select也可以不带from

这种用法常用于判断当前数据库是否链接有效

select 1;

投影查询(指定列查询)

在某系情况下,我们不需要将所有的列显示,只需要指定的列展示就ky,此时就可以指定列名,来选择显示
我们创建一个学生表,包含(id,name,score);

select id,name from student;

而且我们还可以给没一列起一个别名,这样结果集的列名就与原表名不同。

select id,name as studnetName from student;

当一这个此sql语句运行后,name将变成studentName

其中as可以省略

条件查询

我们很多时候并不希望查询所有的数据,而是希望查询一些满足特定条件的数据,例如,查询分数在80及以上的学生数据。当获取几百万的数据记录,十分耗时,而查询满足条件的数据量将会降低很多。

select * from student where score>=80;

where条件来设定查询条件,查询结果都是满足查询条件的。

条件表达式可以用<条件1> AND <条件2>表达满足条件1并且满足条件2

例如我们要查询分数大于80的,且还叫“王二”的同学

  • 条件一:score>=80;
  • 条件二:name=“王二”
select * from student where score>=80 and name="王二";

第二种条件是<条件1> OR <条件2>,表示满足条件1或者满足条件2。

例如我们要查询大于等于80分或者叫“王二”的同学

select * from student where score>=80 or name="王二";

第三种条件是NOT <条件>,表示“不符合该条件”的记录。

例如我们查询不是“王二”的同学

select * from student where not name="王二";

如果不加括号,条件运算按照NOT、AND、OR的优先级进行,即NOT优先级最高,其次是AND,最后是OR。加上括号可以改变优先级。

范围查询

1.BETWEEN … AND …

查询语文成绩在 [80, 90] 分的同学及成绩

select name, score from student where score between 80 and 90;
使用 AND 也可以实现
select name, score from student where score >=80 and score<= 90;

2.IN

查询成绩在59或者60的同学以及成绩

select name ,score from student where score in (59,60);
也可以用or来实现
select name ,score from studnet where score=59 or score=60;

3.模糊查询:like

-- % 匹配任意多个(包括 0 个)字符
select name from studnt where name like '孙%';-- 匹配到孙悟空、孙权
-- _ 匹配严格的一个任意字符
select name from studnt where name like LIKE '孙_';-- 匹配到孙权

去重查询

当不需要重复的数据时,可以用以下关键字进行去重操作

select distinct name from student;

关键字distinct将可以对某列进行去重。

排序

如果不进行排序操作,那么当查询结果出来时,数据时按照插入顺序显示,当需要某一列有顺序时,需要在查询的时候进行对某列排序。

例如,现在将找出学生中分数最低的同学。

select * from student order by score;

order by就是进行排序的关键词,默认情况是升序,但是也可以在order by后加上desc,让其变成降序。

也可以对多个列进行排序,排序优先级随书写顺序

如果有WHERE子句,那么ORDER BY子句要放到WHERE子句后面。这样,结果集仅包含符合WHERE条件的记录,并按照ORDER BY的设定排序。

分页查询

如果数据量十分巨大,那么查询出来的数据放在一个页面上的话数量十分大,不方便越大;

此时将其分页显示的话就会十分合适。而分页功能,就是是将数据分成指定条数作为一页。

我们将结果分页,每页10条数据。

select * from student order by score limit 10 offset 0;

limit 10 offset 0表示,对结果从第0条数据开始,最多取10条(可能数据量小于设定的分页数量)。

当想跳过第一页时,我们只需limit 10 offset 10就可以查询到第二页。

聚合查询

聚合函数

聚和函数就是sql在面对一些简单的数学计算,如:求平均、总数等,而专门提供的函数。

函数结果
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义

要特别注意:如果聚合查询的WHERE条件没有匹配到任何行,COUNT()会返回0,而SUM()AVG()MAX()MIN()会返回NULL

分组

SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查
询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函
数中。

select column1, sum(column2), .. from table group by column1,column3;

案例:

  • 准备测试表及数据:职员表,有id(主键)、name(姓名)、role(角色)、salary(薪水)

  • 查询每个角色的最高工资、最低工资和平均工资

    - create table emp(
    - id int primary key auto_increment,
    - name varchar(20) not null,
    - role varchar(20) not null,
    - salary numeric(11,2)
    - );
    - insert into emp(name, role, salary) values
    - ('马云','服务员', 1000.20),
    - ('马化腾','游戏陪玩', 2000.99),
    - ('孙悟空','游戏角色', 999.11),
    - ('猪无能','游戏角色', 333.5),
    - ('沙和尚','游戏角色', 700.33),
    - ('隔壁老王','董事长', 12000.66);
    
  • 查询每个角色的最高工资、最低工资和平均工资

    select role,max(salary),min(salary),avg(salary) from emp group by role;  
    
Having

GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用
HAVING

  • 显示平均工资低于1500的角色和它的平均工资

    select role,max(salary),min(salary),avg(salary) from emp group by role
    having avg(salary)<1500;
    

联合查询(多表查询)

在实际开发中,往往需要处理来自不同表的数据,所以需要进行联合查询。联合查询就是对多张表的笛卡儿积;

查询多张表的语法是:SELECT * FROM <表1> <表2>

select * from aaa,bbb;

!在这里插入图片描述

使用笛卡尔查询时要非常小心,由于结果集是目标表的行数乘积,假如表一有m行,表二有n行,那么它们的笛卡尔查询将返回n*m行,当n和m较大时,返回的数据量将十分大。

连接查询

连接查询是另一种类型的多表查询。连接查询对多个表进行JOIN运算,简单地说,就是先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上。

内连接
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
外连接

外连接分为左外连接和右外连接。

如果联合查询,左侧的表完全显示我们就说是左外连接右侧的表完全显示我们就说是右外连接

-- 左外连接,表1完全显示
select 字段名 from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;

外连接的特点是当我们选择了完全显示一侧后,即使另一侧没有对应数据,需要完全显示的一侧也会显示,没有的数据则用null来填充。

修改和删除(Update and Delete)

修改

当需要在数据库表的数据进行修改是,可以使用关键词update来将对应数据修改;

update <表名> set 字段1=值1,字段2=值2 ... where ...
--将一班,姓名为张三的同学,分数改为90;
update students set score=90 where name='张三' and classid=1;

删除

delete from 表名 where ....;
--删除一班,姓名为张三的同学;
delete from student where name='张三' and classid=1;

总结

以上就是mysql中简单的crud,希望我的文章能够给你带来帮助。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值