IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mysql 基础查询总结(可视化工具Navicat) -> 正文阅读

[大数据]Mysql 基础查询总结(可视化工具Navicat)

一,新建数据库

字符集utf-8? 排序规则 utf8-general

二,建表

create table 表名(
?? ?列名(字段名) 数据类型 选项(主键、非空、递增),
?? ?列名(字段名) 数据类型 选项
);

三,增加数据

//按照字段插入
insert into 表名(列名1,列名2。。。) values(列值1,列值2。。。);
//插入一条
insert? into? 表名? values(id,name,age,address);
//同时插入多条语句
insert? into? 表名? values(id,name,age,address) , (id,name,age,address),(id,name,age,address);

2.

insert? into? 表名? values(列名1,列名2。。。)

select ‘1列值1 ’,’1列值2‘,..... union?????????? (union?? 联合 不用加逗号)

select ‘2列值1 ’,’2列值2‘,..... union??????????

select ‘3列值1 ’,’3列值2‘???????? (最后一个不用加union)

;

三,更改

update 表名 set 列名 = ‘列值’ (修改的列) where 列名 = ‘列值’(标识列);

update 表名 set 字段名=字段值 where 条件;
update st set name="李四" where id = 1;
//where 代表条件
//如果不写where? 代表全表更新修改。

四,删除

delete from 表名 where 列名 = ‘列值’;

delete from st where name='李四';
delete from 表名? where? 条件;

---------------------------------------------------------------------------------------------------------

查询

一,查询语句顺序

select*from 表名

顺序(重点)

select
	字段列表
from 
	表名列表
where
	条件列表
group by 
	分组字段
having
	分组后的条件
ORDER BY
	排序列名 asc/desc
limit 保留几条数据

特点:

①:我们想查询该表的那些列 可以直接写列名 ,顺序可以自定义

SELECT `name`,age,address,sex from student;

②:如果需要所有列都被查询 ,可以使用 select * , *号代表所有列

SELECT * from student;
* 匹配所有
速度慢,一般项目中使用列名直接匹配

③:列和表都可以起别名(别名只有在起别名的那句SQL中才能识别此时表的别名 在多表查询的时候需要用到)。

SELECT s.`name`,s.age+3 a,s.address from student s;
此时  a 就是  s.age+3这一列的别名 ? ?  s就是student 表的别名

④:查询中列支持运算

SELECT s.`name`,s.age+3 a,s.address from student s;

1、去重查询

特点:尽量少用,会影响性能

select distinct 列名 from 表名;

2、条件查询 where 语句

SQL语句中的条件表达式:查询条件、判断条件、修改条件

条件运算符:= > < >= <= 不等:<> 和 !=

算术运算符:+ - * / %(mod) 不支持:++ -- 复合赋值 += -=

逻辑运算符:

  • and(&&):并且 :多个条件同时成立 就true 否则返回false

  • not(!):非 :取反

  • or(||):或 ,多个条件只要有一个成立,结果:true ,都不成立:false

  • ①:条件运算符

    ②:多条件查询

  • ③:范围查询 ;

    and 运算符连接条件

    ④: between a and b; 根据某个字段值的区间范围来查询符合条件的记录,这个范围内有多少数据并不明确

  • ⑤:in (在。。内);用来匹配某个字段的值是几个可数的选项值之一

    不是范围,确定的值。

  • 3.1 通配符

    正则模式REGEXP操作符

  • “.” 匹配任意单个的字符。

  • “[ ]” 匹配在[]内的任意一个字符

  • [^] 匹配不在[]内的任意一个字符

  • “ * ” 匹配零个或多个在它前面的字符 “+” 匹配+前面的字符1次或多次 “{n}” 匹配前面的字符至少n次 “^” 匹配文本的开始字符

  • “$” 匹配文本的结尾字符

  • 3.2 模糊查询 like 关键字

    使用通配符

    '%a' //以a结尾的数据

    'a%' //以a开头的数据

    '%a%' //含有a的数据,三位且中间字母是a的

    '_a' //两位且结尾字母是a的

    'a_' //两位且开头字母是a的

    %:表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两

    个百分号(%%)表示。

    _:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。

  • -- 查询张姓同学名字是两个字的 
    SELECT * from student where `name` like '张_';
    -- 查询名字中带有王字的
    SELECT * from student where `name` like '%王%';
    -- 查询名字中间是中字的
    SELECT * from student where `name` like '_中_';
    -- 姓老的 地址里有周口的
    SELECT * from student where `name` like '老%' and address like '%周口%';

    4、排序操作

    order by 列名 asc 默认升序 desc 默认降序

    -- 排序操作
    -- 查询所有学生,按照年龄排序
    SELECT * from student ORDER BY age DESC;
    -- 查询所有的学生按照年龄升序,按照班级降序。(在年龄相同的基础上,按照班级降序)
    SELECT * from student ORDER BY age asc ,classid desc;
    -- 查询姓老的学生,按照年龄升序,按照班级降序
    SELECT * from student where name LIKE '老%' ORDER BY age ASC,classid desc;
    -- 按照birthday 排序
    SELECT * from student ORDER BY birthday; 

    5、聚合函数和分组查询

    5.1 聚合函数

    就是对某一列的数据进行运算获取某些列的最大值、最小值、平均值等统计分析信息,有时候还需要计算出究竟查询到多少行数据项。分别有:sum(列),count(注意非空值) 计数、max(列)、min(列)、avg(列),count(空值)不计入数据。

    count(列名/*) 如果列名存在null值,不计入总数。

    -- 查询学生的总数
    SELECT COUNT(*) from student;

    max(列名) 取列名中的最大值

    -- 查询年龄最大的学生
    SELECT max(age) from student;

    min(列名) 取列中的最小值

    -- 取最小年零的学生
    SELECT MIN(age) from student;

    sum(列名) 求和

    -- 全班所有人的年龄和
    SELECT sum(age) from student;

    avg(列名) 求平均值

    -- 求年龄平均值
    SELECT avg(age) from student;
  • 5.2 分组查询

    group by 列名 是将 某一列 相同数据的行当成一组

    -- 分组查询
    -- 求出每个班级的平均年龄  按照班级分组
    SELECT classid,avg(age) from student GROUP BY classid;
    SELECT address,avg(age),COUNT(*) renshu from student GROUP BY address;

    having 对分组后的数据做过滤,注意分组查询添加条件 group by 列名 having 条件;

  • -- 查询出所有 人数大于5 的班级
    SELECT count(*),classid from student GROUP BY classid HAVING count(*)>5;

    6、分页查询 limit

    每次我们直接 select * from t_people 会将数据全部查询出来,如果一张表数据量比较大 ,此时 容易爆炸,所以真正开发的时候,都是只查一部分数据,所以都是进行分页操作的。

  • -- limit 分页查询   0代表索引 第一条数据   5 代表长度  代表查询5条数据
    SELECT * from student LIMIT 0,5;

    7、多表联查

    7.1 为什么需要多表联查

    数据来源多张表的时候需要进?关联查询

    在实际开发过程中很多时候需要同时使?多个表中的数据

    关联查询:?的:我需要数据来源多张表,?张?张查太麻烦了,所以出现了关联查询。

    7.2 内连接 inner join

    内连接和外连接一样都是最常用的连接查询,它根据表中共同的列进行匹配,特别是两个表存在主外键关系时,通常会使用到内连接查询 内连接也称为等值连接,返回的结果集是两个表中所有相匹配的数据,舍弃不匹配的数据。

    1)等值连接(隐式内连接):简单,但是碰到问题不好调。

  • select 列名...... from 表1,表2,表3,表4....where 关联条件、还可以过滤条件	

  • 2)inner join内连接(显式内连接)on ,扩展方便

  • select 列名,......from 表1 
    [inner] join 表2 on 关联条件		
    [inner] join 表3 on 关联条件		
    [inner] join 表4 on 关联条件		 
    where 过滤条件;

7.3 外连接

外连接是至少返回一个表中的所有记录,根据匹配条件有选择性地返回另一张表的记录 外连接就是在满足表连接关系的情况下不但可以查找出匹配的数据,而且还可以包含左表,右表或是两表中的所有的数据行

SELECT * from 表1 LEFT JOIN 表2 ON 条件;

  • 左外连接 left join on条件

  • -- 学生表跟班级表左外连接查询SELECT * from tab_studentinfo stu LEFT JOIN tab_class 
    tcon stu.classID=tc.classID;

    左外保证左表完整、如果不匹配null值填充

  • 右外连接 right join on条件

    右外保证右表完整、如果不匹配null值填充

  • SELECT * from 表1 right JOIN 表2 ON 条件;

    -- 学生表跟班级表右外连接查询
    SELECT * from tab_studentinfo stu RIGHT  JOIN tab_class tc
    on stu.classID=tc.classID;

  • ?交叉连接(笛卡尔乘积) cross join

  • 交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行再一一组合,相当于两个表“相乘”左表中每一行的数据都和右表组合一次,相当于两表的排列组合,返回的条数其实就是两表的成绩交叉连接没有关联条件

子查询

1.联合查询

union 合并去重复 两个的集合并集;并且会排重

如果是一个字段,重复直接去掉,如果是多个字段,都相同才会去重。

-- 查询所有教师和学生的 name ? birthday  sex 
SELECT tname,tbirthday,tsex ?FROM teachers UNION 
SELECT sname,sbirthday,ssex ?from  students;

union all:但是不会排重

-- 查询所有教师和学生的 name ? birthday  sex
SELECT tname,tbirthday,tsex ?FROM teachers UNION ALL
SELECT sname,sbirthday,ssex from  students;

union all 效率比union 高。

2.

2.子查询

2.1 什么是子查询

子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句中的查询。数据库引擎将子查询作为虚表执行查询操作。

子查询可作为联接语句中的一个表,也可作为选择语句中的一个值。

子查询的执行依赖于嵌套查询。顺序从最内层开始,一层一层向外执行,外层的嵌套查询可以访问内层嵌套查询的结果,相比变量方式执行效率更高,子查询还可以将多表的数据组合在一起。

2.2 子查询的类型

查询语句中的任何条件,值,范围,都可以使用子查询表示。

将子查询的结果集 再作为一个临时表来用。

  • 子查询结果为多行多列(当作虚拟表来使用)

  • -- 查询成绩比该课程平均成绩低的同学的成绩表
    -- 1.求出所有课程的平均成绩
    SELECT avg(degree) from scores GROUP BY cno;
    -- 2.将学生的成绩跟平均成绩比较,取比平均成绩低的学生
    SELECT sd.sno,sd.sname,sc.cno,cs.cname,sc.degree
    from scores sc,students sd ,courses cs
    WHERE sc.sno=sd.sno and sc.cno=cs.cno AND
    sc.degree < (
    		SELECT avg(degree) 
    		from scores sc1 
    		WHERE sc.cno=sc1.cno 
    		GROUP BY sc1.cno
    ) ORDER BY sc.degree;

    子查询结果为多行一列(可以当作多个值来用(1,2,3,4))

  • -- 查询存在有85分以上成绩的课程名字
    -- 先查85分以上成绩的课程cno
    SELECT DISTINCT cno from scores where degree > 85;
    -- 根据cno查 cname
    SELECT cs.cno,cs.cname from courses cs where cs.cno in (SELECT DISTINCT cno from scores where degree > 85);

子查询结果为一个值。(可以作为字段使用)

-- 查询成绩表中分数最高的同学的记录
SELECT * from scores where degree = (SELECT max(degree) from scores);

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 14:59:55  更:2021-10-24 15:01:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:05:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码