MySQL数据库(一:概念 DDL DML DQL 模糊查询 字段控制 排序 聚合函数 分组查询 分页limit

MySQL数据库(一:概念 DDL DML DQL 模糊查询 字段控制 排序 聚合函数 分组查询 分页limit)

服务器:提供某种服务的计算机 它是硬件与软件的组合

  • 安装了数据库软件 就叫数据库服务器
  • 安装了tomcat 就叫web服务器

概念

  • 数据存储的仓库 用于管理和存储数据
产品:
关系数据库:由行和列组成的二维表 表与表有对应关系
oracle
DB2 IBM
Mysql mysql
sql server
Sqllite 安卓系统内置数据库


NoSql系列数据库 not only sql 非关系型数据库

指令

services.msc  打开服务面板
net start mysql
net stop mysql

SQL

如何来操作关系型数据库:我们使用SQL来进行操作
SQL:结构化查询语言(Structured Query Language)简称SQL 结构化查询语言,是一套操作关系型数据库的规范,所有的关系型数据库,都遵循此规范,但是可以运行各家数据库有所差异,那么这些差异我们称之为方言。

细分SQL

把SQL分为这几类
DDL:数据定义语言,用来定义数据库对象:库、表、列等;
DML:(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
DQL:查询表中的数据
DCL:数据控制语言,用来定义访问权限和安全级别;

DDL

  • 登录:
mysql -uroot -p;
  • 查看所有的数据库
show databases;
  • 创建数据库
create database mydb;
  • 删除数据库
drop database mydb;
  • 查看建库语句
show create database mydb;
  • 修改数据的编码
alter database mydb character set='gbk';
alter database mydb character set='utf-8';
  • 切换数据库
use mydb;
  • 查看该库下所有的表
show tables;

建表

!! 字段的名称 不要使用mysql关键字
  1. 表头(字段 列名):建表时 这个字段是要规定数据类型的
MySQL中字段常见的数据类型

  • 建表的语法
create table student( 
	id int, 
	name varchar(10),
	sal double(6,2),
	brithday timestamp
);
  • 查看表结构
desc student;
  • 查看表
show tables;
  • 删除表
drop table student;
  • 修改表名
alter table student rename to san;
  • 修改 alter(增加 删除 修改 列)
  1. 增加列
alter table san add(sex char(1));
  1. 删除列
alter table san drop sex;
  1. 修改列名
alter table san change id sid int;
  1. 修改列的数据类型
alter table san modify name char(3);
  1. 用change也可以修改类的数据类型
alter table san change name name varchar(10);
登录:mysql -uroot -p123456
show databases; -- 查看所有的数据库
create databse mydb -- 创建数据库 
drop database mydb; -- 删除数据库

show create database mydb; -- 查看建库语句
-- 修改数据的编码
alter database mydb character set='gbk';
alter database mydb character set='utf8';


-- 切换数据库
use mydb;


-- 查看该库下所有的表
show tables;


-- 建表:
--  表头(字段,列名)
-- 建表时 这个字段是要规定数据类型的。
-- mysql中字段常见的数据类型
						 int:整型		id int,
					 	 double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
											money double(5,2)
					 	char:固定长度字符串类型;
								name char(10)		"张三"
					 	varchar:可变长度字符串类型;
								name varchar(10)	"张三"
					
					 	text:字符串类型;存大格式的文本 比如存个小说 一般不用
					 	blob:字节类型;存字节类型的数据  比如电影字节  图片字节 但是一般不会把字节数据存到数据库当中
					 	date:日期类型,格式为:yyyy-MM-dd;
					 	time:时间类型,格式为:hh:mm:ss
						datetime:日期时间类型   yyyy-MM-dd hh:mm:ss
					 	timestamp:时间戳类型	 yyyy-MM-dd hh:mm:ss
							如果该类型的字段不给赋值,则默认当前时间
							
							
-- 建表的语法,注意 字段的名称,不要使用mysql的关键字
create table student( 
	id int, 
	name varchar(10),
	sal double(6,2),
	brithday timestamp
);
-- 查看表结构
   desc student;
-- 删除表:drop table student2;

-- 修改表名:alter table student rename to student2;

create table student3( 
	id int default 1,
	name varchar(10),
	sal double(6,2),
	brithday timestamp
);


--alter  增加列,删除列 ,修改列
-- 增加列 add()
alter table student add(sex char(1));

-- 删除列 drop 
alter table student drop sex;

-- 修改列名:change
alter table student change id sid int;

-- 修改列的数据类型
alter table student modify name char(3);

-- 用change 也可以修改类的数据类型

alter table student change name name varchar(10);

alter table student change brithday birthday timestamp;

DML(往表中进行增删改查)

  • 往表中插入数据 insert into
insert into san(sid,name,sal,birthday) value(1,'zhangsan',5555,'2020-09-30 13:33:33')
insert into san value(11,'zhang',515,'2020-09-30 13:33:33');
  • 删除表中的数据(delete)
delete from san;
  • 带有条件的删除(delete)
delete from san where sid=1 or sid=11;
  • 修改表中的数据(update)
update san set name='wa',sal='6666';
  • 带条件的修改表中的数据(update)
update san set name='wa',sal='6666' where sid=11 or sid=1;
DML:往表中进行增删改。

-- 往表中插入数据 insert into
-- 日期类型的值,要用单引号引起来,字符类型也要用单引号引起来。
insert into student(sid,name,sal,birthday) values(1,'zhangsan',5555.55,'2020-09-29 14:25:30');

insert into student(sid,name) values(2,'lisi');

insert into student(sid,name,birthday) values(3,'wangwu',null);

-- 简写:如果你要给表中所有的字段,都要插入值,那么前面的字段可以不用写

insert into student values(4,'zhangsan4',5555.55,'2020-09-29 14:25:30');

-- delete 删除表中的数据
delete from student; --没有条件的删除,会删除表中所有的数据。

-- 带有条件的删除。where 条件=、!=、<>(不等于)、<、<=、>、>=;|| or && and
delete from student where sid=1;

delete from student where sid=2;
delete from student where sid=3;


delete from student where sid=2 or sid=3;

delete from student where sid=4 and name='z';

delete from student where sid=4 && name='z';

-- 修改 update

update student set name='aa',sal='6666.66';  -- 不带有条件的修改

-- 带有条件的修改

update student set name='bb',sal='6666.77' where sid=1;

update student set name='cc',sal='6666.77' where sid=1 or sid=2;

DQL

DQL:所有的查询语句就为DQL DQL语句会有select 开头
-- * 表示查询所有字段
select * from emp; -- 不带有条件的查询。

-- 查询个别字段
select ename,sal,comm from emp;

-- 带有条件的查询:

 * DQL:查询
		* 语法:
			SELECT 
				selection_list /*要查询的列名称*/
			FROM 
				table_list /*要查询的表名称*/
			WHERE 
				condition /*行条件*/
			GROUP BY 
				grouping_columns /*对结果分组*/
			HAVING 
				condition /*分组后的行条件*/
			ORDER BY 
				sorting_columns /*对结果分组*/
			LIMIT 
				offset_start, row_count /*结果限定*/



		* 条件查询:where 子句
			=、!=、<>(不等于)、<、<=、>、>=;
			BETWEEN…AND;  在什么范围之间
			IN(set);
			IS NULL;为空
			IS NOT NULL 不为空
			AND; 并且
			OR;   或者
			NOT;非
			
			
	-- 查询工资大于	1000 的 员工信息
    
    select * from emp where sal>=1000;
    
    -- 查询工资大于等于1000 小于等于2000的员工信息
    
     select * from emp where sal>=1000 and sal<=2000;
     
     -- 写法2 BETWEEN…AND;  在什么范围之间
     select * from emp where sal between 1000 and 2000;
     
     --  查询编号是 7499 和 7521 的员工
     
     select * from emp where empno=7499 or empno=7521;
     
     -- 写法2 in
      select * from emp where empno in(7499,7521,7876,100);
      
  -- 查询有奖金的员工  
  -- 对 null 值的判断 is null  is not null 不要用 = !=
     select * from emp where comm is not null; -- 判断不是null
      select * from emp where comm is null; -- 判断是null
      
      --  <=> 等于 可以判断 null 值
       select * from emp where comm <=> null;
     

模糊查询 like

  • like
%   匹配多个任意字符
_   匹配单个任意字符
  • 查询名字包含S的人
select * from emp where ename like '%S%';
  • 查询S开头或结尾的
select * from emp where ename like 'S%';
select * from emp where ename like '%S';
  • 查询第二个字符是C的
select * from emp where ename like '_C%';
  • 查询名字是五个字符的
select * from emp where ename like '_____';

字段控制

  • 给字段起别名 as 用于临时展示 可以省略不写
select * from emp;
select 	empno as 员工编号,ename as 员工姓名,sal 工资,comm 奖金 from emp;
  • 给表取别名 一般用于多表查询的时候 可以给表起个别名
select * from emp;
select * from emp;
-- as给字段起别名,用于临时展示 as 可以省略不写
select empno as 员工编号,ename as 员工姓名,sal 工资,comm 奖金 from emp;

-- 给表可以起别名 一般用于多表查询时,可以给表起个别名。

select * from emp;

SELECT emp.empno,emp.sal  FROM emp;
-- 给表起别名 as 可以省略不写
SELECT e.empno,e.sal,e.comm  FROM emp AS e;

-- 字段运算 查询这个人的年薪是多少。

select ename as 姓名,sal as 月薪,sal*12 as 年薪 from emp;

-- floor(sal*12) 调用内置函数
select ename as 姓名,sal as 月薪,floor(sal*12) as 年薪 from emp;


--查询这个人的年薪是多少,把奖金算上
-- null 值参与数学运算,结果是null
-- 在这里我们想把null看做0来对待 可以使用一个函数 ifnull()
ifnull(comm,0) 如果comm是null 就返回0 不是,就取原来的值  意思就是:comm==null?0:comm;
select ename as 姓名,sal as 月薪,sal*12+ifnull(comm,0) as 年薪 from emp;

select sal from emp where sal=3000;

--  distinct 去除重复记录
select distinct sal from emp where sal=3000;

order by排序

-- 升序排列工资
-- asc 默认值 升序排列
-- 降序排列 desc
select * from emp order by sal desc;

-- 排列字符类型,按照字典顺序排列
select * from emp order by ename desc;

-- 定义第二排序条件
select * from emp order by sal asc,comm desc;

聚合函数

聚合函数是对列做运算
count()
-- 我要查询公司有多少员工
select count(empno) as 总人数 from emp;

-- null值不参与统计
select count(comm) as 总人数 from emp;

-- 直接给个*
select count(*) as 总人数 from emp;

-- 查询平均工资
avg()
select avg(sal) as 平均工资 from emp;

-- 查询总工资
sum()

select sum(sal) as 总工资 from emp;

-- 最高工资 max()
select max(sal) as 最大工资 from emp;

--- 最小工资 min()

select min(sal) as 最小工资 from emp;


-- 最高工资 max() 那个人是谁
select max(sal) as 最大工资 from emp;
-- 子查询
select * from emp where sal=(select max(sal) as 最大工资 from emp)

分组查询 group by

一般这个聚合函数会配合这个分组来用
-- 按照奖金分组
select comm from emp group by comm;


-- 按照部门分组了
select deptno from emp group by deptno;
-- 查询每个部门的平均工资
select deptno as 部门编号 ,avg(sal) 部门平均工资 from emp group by deptno;



-- 查询 每个部门有多少人
select deptno as 部门编号 ,count(sal) 部门人数 from emp group by deptno;

-- 1.例如查询 每个部门的部门编号 以及每个部门工资大于1500的人数
-- where 在分组之前要进行筛选,符合条件的参与分组,不符合条件的不参与分组
select deptno as 部门编号 ,count(sal) 部门人数 from emp where sal>1500 group by deptno;

-- 2.例如 我要查询 各个部门平均工资 大于2000 的部门
select deptno as 部门编号 ,avg(sal) 部门平均工资 from emp group by deptno;

-- 分组完成之后,产生了一个结果,想要对分组结果进行再次筛选,使用having

select deptno as 部门编号 ,avg(sal) 部门平均工资 from emp group by deptno having avg(sal)>2000;

select deptno as 部门编号 ,avg(sal) 部门平均工资 from emp group by deptno having 部门平均工资>2000;


-- 例如我要查询 各个部门  员工工资大于1500 的平均工资  并且平均工资 大于2000的部门

select deptno as 部门编号 ,avg(sal) 平均工资 from emp where sal>1500 group by deptno  having 平均工资>2000;


-- having 和 where 的区别

* where和having
			* where:在分组之前对条件进行限定。不满足条件,就不会参与分组
			* having:在分组之后,对结果集的筛选


分页limit

-- 一页展示5条

-- 第一页
select * from emp limit 0,5 -- 值1 起始索引 值2是每页的条数

-- 第二页

select * from emp limit 5,5; -- 值1 起始索引 值2是每页的条数

-- 第三页

select * from emp limit 10,5;

起始索引=(页码-1)*每页的条数


select * from emp order by sal desc limit 10,5;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值