mysql数据查询

本文详细介绍了SQL的基础查询操作,包括创建表、插入数据、删除外键、查询特定列、全列查询、别名设定、数据去重、计算与排序等。此外,还深入讲解了聚合查询、分组查询、子查询以及不同类型的连接查询,如内连接、左外连接、右外连接,并通过实例展示了如何进行复杂的数据分析。内容覆盖了SQL的基本语法和实用技巧,适合数据库初学者和进阶者学习。
摘要由CSDN通过智能技术生成

数据查询

一. 简单查询

#创建一个班级
create table empname(
	empid int primary key,
	ename varchar(20)
	sex tinyint,
	clas varchar(20)
);
create table emp(
	eid int primary key auto_increment,
)
#删除外键的时候要先删emp这个表才行
#添加内容需要先添加到加了外键的另一张表中
#添加数据 (新建一个查询insert)
use shujuku;
insert into empname values(100,"小明",1,"设计部"),(101,"小摆",2,"程序部"),(102,"小留",1,"程序部"),(103,"小小",1,"管理部"),(104,"小金",2,"")
insert into emp values(null,100),(null,101),(null,102),(null,103),(null,104)
  1. 查询特定的列
select *from emp;
select *from empname;
  1. 查询所有的列
select ename from empname; #ename是列名 empname是表名
select sex from empname;
#查询其中的几项用,隔开就行了
select ename,sex from empname;
  1. 给列起别名
select ename as "姓名",clas as "部门",sex as "性别";
#as可以不写,中间用空格隔开即可 select ename "姓名",clas "部门",sex as "性别";
  1. 合并相同的项
select * from emp;
#查询emp中有多少部门(数据表见最下面)
select distinct deptid from emp;#去掉重复的那些 只看到不重复的
  1. 查询时执行计算
#查询员工工资
select ename "姓名",salary*12 "年薪" from empname;
  1. 结果集的排序
#查询员工工资 按照工资排序
select ename "姓名",salary "工资" from empname order by salary asc;#asc默认升序 desc降序
  1. 条件查询
#查询员工工资大于一千的人
select * from empname where salary>=1000
  1. 模糊条件查询
select ename from empname where ename like '小_'
#查询带“小”字开头的,并且后面只有一个字符
#%表示有0~n个字符  _表示1个字符
#条件实在 where 关键词的后面写
#like:一种好像的意思
  1. 分页查询
#关键词:limit
#第一页:
select * from empname limit 0,3;
#查找到第1,2,3条
#第二页:
select * from empname limit 3,3;
#m表示从数据第m条开始查询
#n表示从m条开始的后n条开始查询

#当limit只有一个参数的时候
select * from empname limit 5;
#查询前5条数据

*提示:页码 = (当前页数-1)页码数据量

eg

#来个大练习
#创建数据库
set names utf8;
drop database if exists pra;
create database pra charset=utf8;
#进入数据库
use pra;
#创建数据表
#emp(设置外键) empname deptemp
create table empname(
	empid int primary key,
	ename varchar(8),
	salary decimal(9999999),
	brithday date
);
create table deptemp(
	deptid int primary key,
	dept varchar(8)
);
create table emp(
	eid int primary key auto_increment,
	#设置外键
	empid int,
	foreign key(empid) references empname(empid)#第一个empid是emp表里的
	deptid int,
	foreign key(deptid) references deptemp(deptid)
);
desc emp;#查看外键
insert into empname values(100,"小明",1000,2020-09-03),(101,"小红",2000,2020-09-04),(102,"小蠢",3000),(103,"小憨",4000,2020-09-05),(104,"小玲",5000,2020-09-06),(105,"小明",6000,2020-09-07)
insert into deptemp values(401,"设计部"),(402,"程序部"),(403,"教育部"),(404,"游戏部");
#向emp中插入数据
insert into emp values
(null,100,401),(null,101,402),(null,102,403),(null,103,404),(null,104,401),(null,10,402)

二. 复杂查询

  1. 聚合查询/分组查询
  • 聚合函数
  1. 获取数量
select count(*) from empname;
#获取这一项有多少个
  1. 求总和
select sum(salary) from empname;
  1. 求平均数
select avg(salary) from empname where sex = 1
#求女生的平均工资
  1. 求最大最小值
select max(salary) as "最高工资",min(salary) as "最低工资" from empname where sex = 0;
#where 是查询男生或者女生
  1. 获取当前数据中的年份数值
select year(birthday) from empname;
  1. 获取当前数据中的月份数值
select month(birthday) as
"月份",year(birthday) as "年份" from empname;
  • 分组查询
    group by
select avg(salary),max(salary),min(salary),sex from empname group by sex;
#分组查询只能查询聚合函数和分组条件
  1. 子查询

子查询就是把一个sql语句的查询结果作为另一个sql语句的查询条件

#先查询小明的工资
select salary from empname where ename = "小明 "
#查询高于小明工资的员工
select ename,salary from empname where salary> (select salary from empname where ename = "小明 ")
  1. 多表查询(跨表查询)
  • 内连接
#inner join ...on...
select * from emp inner Join empname on empid=empid
#多表查询避免笛卡尔积
select eid,ename from emp,empname where empids =empid
  • 左外连接
#left outer join ...on...
select * from emp left outer join empname on empids=empid;
select eid,ename from emp,empname where empid=empid;
  • 右外连接
#right outer join ...on...
select * from emp right outer join empname on empids=empid;
select eid,ename from emp,empname where empid=empid;
  • 全连接
#mysql 不支持全连接full join...on.. 所以用union合并相同项
(select * from emp left outer join empname on empids=empid)
 union #合并相同项
 #union all  不合并相同项
(select * from emp right outer join empname on empids=empid);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值