欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL基础1

程序员文章站 2022-09-03 19:10:49
MySql基础1services.msc 打开服务面板net start mysqlnet stop mysqlSQL如何来操作关系型数据库:我们使用SQL来进行操作SQL:结构化查询语言(Structured Query Language)简称SQL 结构化查询语言,是一套操作关系型数据库的规范,所有的关系型数据库,都遵循此规范,但是可以运行各家数据库有所差异,那么这些差异我们称之为方言。细分SQL把SQL分为这几类DDL:数据定义语言,用来定义数据库对象:库、表、列等;DML:...

MySql基础1


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 -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
							如果该类型的字段不给赋值,则默认当前时间
-- 建表的语法
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;

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;非

模糊查询:like

通配符
				 _:匹配单个任意字符



			比如: 我要查询姓名是3个任意字符组成的
			select  * from student sname like='___';3个就写三个横杠
			例如:我要查询第二个字符是m的
			select * from student where sanme like '_m%';
			



		 %:匹配多个任意字符
			例如:我要查询名字中包含m的 select * from student where sname like '%m%';
			例如我要查询名字是a开头的 select * from student where sname like 'a%';
			例如我要查询名字是b结尾的 select * from student wher like '%b';
			
字段控制:
			 修改字段的别名:AS (可以省略)
				给字段起别名:
				例如:   select sname as 姓名, sage 年龄 from student;
				给运算字段起别名:
				 例如: select sname as 姓名, (工资+奖金) as 总收入 from student;

				 给表起别名:给每一张表起一个别名。简化书写
`				例如: select stu.sname, stu.sage from student as stu;
			 字段运算:
				 null参与的运算,结果都为null  
				比如 工资 是100  奖金是null  我们让这两个字段运算 那结果就为null
				 一般会将null替换为0: ifnull(字段名称,如果是null的替换值)  ifnull 是mysql的方言
				
				所有如果奖金字段为null 一般我们把奖金替换为0
				例如: select sname,(工资+ifnull(奖金,0)) as 总收入from student;
						
			 去除重复记录   比如我查询工资是3000的 出现了多条工资为3000 的记录 那我只想展示一条3000的记录  所以可以用 distinct 去除重复记录
				 DISTINCT     

				例如: select distinct 工资  from student;

		排序: order by  默认升序排列  ASC 默认值                DESC 降序排列
		 按工资从小到大排
		select * from student order by 工资 asc;
		按工资从大到小排
		select * from student order by 工资 desc 
		如果出现多条工资一样的 那我们可以指定第二排序条件 
		select * from student order by 工资 desc,奖金desc;
 	
	 聚合函数:
		 聚合函数是用来做纵向运算的函数:
		 	COUNT():统计指定列不为NULL的记录行数; 统计个数的 比如我统计有多少个学生
			select count(sid) from student;  或者传个星 号    select count(*) from student;         一般不要传有null 值的字段

		 	MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
 			例如 查询工资最大值    select max(工资) as 最高工资 from student;
			
		 	MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
			例如 查询 最少工资   select min(工资) as 最小工资 from student;
		 	SUM():计算指定列的数值和,如果指 定列类型不是数值类型,那么计算结果为0;
			 例如 计算总工资  select sun(工资) as 总支出 from student;

		 	AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
			例如:计算平均 工资 select avg(工资) as 平均工资 from student;

	 分组查询:group by     一般配合聚合函数使用 查出的数据才有意义
		查询的字段:
			1.分组字段本身
			2.聚合函数
		比如我按部分编号分组  比如有三个部门 然后我求每个部门的平均工资  那展示出来的数据应该有三条
		例如: select 部门编号,AVG(工资) from student group by 部门编号;

		1.例如查询 每个部门的部门编号 找出每个部门工资大于1500的人数
		select 部门编号, count(*) from student where 工资>1500 group by 部门编号;
		注意这里的 where 是对分组前的条件限定 也就是说不满足条件的 不参与分组

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

		2.例如 我要查询 各个部门平均工资 大于2000 的部门

		select 部门编号,avg(工资) from student group by 部门编号 having avg(工资)>2000;

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

		 上面这句话怎么理解呢? 首先查询各个部门 那肯定要按部门编号分组 分组前的条件限定是 员工工资大于1500的才参与分组
		计算出平均工资  然后对结果再进行筛选 筛选出 平均工资 大于2000的部门
		
 		select 部门编号,avg(工资) from student group by 部门编号 where avg(工资)>1500 having  avg(工资)>2000;

	 分页查询:limit
		 limit 0,5 开始的记录索引, 每一页显示的条数     索引从0开始
			开始的记录索引  = (页码-1)*每一页显示的条数

		例如 我显示第一页  每页5条记录
		select * from student limit 0,5 ;  这是第一页 5 条记录
		select * from student limit 5,5 ; 这是第二页 5条记录
		select * from student limit 10,5 这是第三页 5条记录

		
		 oracle:rownum 分页方言
		 sqlserver:top 分页方言


本文地址:https://blog.csdn.net/qq_46466568/article/details/108992831