九、Mysql数据库--查询基础(二)

一、sql简介

 
  SQL 全名是结构化查询语言(Structured Query Language),是用于数据库中的标准数据查 询语言,
  IBM  公司最早使用在其开发的数据库系统中。1986 年10 月,美国  ANSI  对  SQL  进行规范后,以此
  作为关系式数据库管理系统的标准语言  (ANSI  X3.  135- 1986),1987 年 得到国际标准组织的支持下
  成为国际标准。不过各种通行的数据库系统在其实践过程中都 对  SQL  规范作了某些编改和扩充。
  所以,实际上不同数据库系统之间的SQL 语言不能完 全相互通用。
  
			DML 语句(数据操作语言)Insert、Update 、 Delete 、
			DDL 语句(数据定义语言)Create、Alter 、  Drop、Truncate  
			DCL 语句(数据控制语言)Grant、Revoke  事务控制语句Commit  、Rollback、Savepoint  

二、数据库管理

	1.登录数据库
	  			mysql -u root  -p

在这里插入图片描述

	2.查看所有的数据库
			show databases;

							+--------------------+
							| Database           |
							+--------------------+
							| information_schema |     -- mysql元数据,基础数据
							| mysql              |    --  mysql配置数据库,其中包含用户信息。(用户名和密码,权限管理)
							| performance_schema |    --  mysql数据库软件的运行数据,日志信息,性能数据
							| test               |    --  测试数据库。空的
							+--------------------+
							4 rows in set (0.00 sec)
						
							以上四个库是mysql的基础数据库,存储着mysql的基础数据,如变量等等。
	3.显示数据库语句:
		SHOW DATABASES    只是显示数据库的名字
	
	4.显示数据库创建语句:
		SHOW CREATE DATABASE db_name
	 
	5.数据库删除语句:
		DROP DATABASE  [IF EXISTS]  db_name 
	 6.创建数据库
				create  database  day15;       -- 指定默认字符集创建数据库
   
   							 -> default character set utf8
    						 -> ;
							  Query OK, 1 row affected (0.00 sec)
	
	  7.删除数据库
		        drop database   day15;
		   

	  8.查看数据库默认的字符集
			    show create database  day15;
	
	  9.修改数据库默认的字符集
				alter database day15 default character set gbk;
	  7.进入数据库
	  			use  day15;

三、表的管理

3.1 MySQL常用数据类型

在这里插入图片描述

3.2 sql语句

	+++ 查看数据库中所有的表
					show tables;
					
	+++ 查看一张表的表结构
						desc  student;
						
	+++ 创建表
					    create table student(
						     sid int,
						     sname varchar(20),
						     sage int
						    );


	+++ 删除表
						drop  table  day15;
	
	+++ 修改表
			1)添加字段
				      alter table student add column sgender varchar(2);

		    2)删除字段
				
					  alter table student drop column sgender;

			3)修改字段类型
				
					   alter table student modify column remark varchar(100);

			4)修改字段名称
				
						alter table student change column sgender gender varchar(2);


			5)修改表名称
				
						alter table student rename to teacher;
	

在这里插入图片描述

四、数据管理

4.1 增删改数据

     ++++ 增加数据
		  1)插入所有字段
				INSERT INTO student VALUES(1,'张三','男',20);
				
				必须依次插入所有字段对应的数据,一个都不能少,一个都不能乱

		  2)插入部分字段
				INSERT INTO student(id,NAME) VALUES(2,'李四');

	 ++++ 修改数据
		  1)修改所有数据(建议少用)
				UPDATE student SET gender='女';
		 
		  2)带条件的修改(推荐使用)
				UPDATE student SET gender='男' WHERE id=1; -- 修改id为1的学生,修改性别为男
		 
		  3)修改多个字段,注意: SET 字段名=值,字段名=值,....
				UPDATE student SET gender='男',age=30,name='小三' WHERE id=2;
	
	 ++++ 删除数据
		  1)删除所有数据
		  		方式一:
						delete from student;
				
				方式二:
						truncate table student;
						
		  2)带条件的删除(推荐使用)
				DELETE FROM student WHERE id=2;


delete from stu 和 truncate table stu 的区别?

 删除表中所有数据有两种方式,
 				一种是   delete from stu ;
 				另一种是	 truncate table stu;
 				
 delete from stu  和 truncate table stu 的区别?
	 
	 -- delete from:    可以全表删除      
			
			 1.可以带条件删除 
			 		delete from table where id=1; 
			 		
			 2.只能删除表的数据,不能删除表的约束 
			 		例子:如果表中的数据id为自增的,此时id为11。
			 			  这时使用  delete from stu 删除全表。
			 			  再次新增数据时,id为12;(删除全表,没有影响自增长约束)
			 		    
			 3.使用delete from删除的数据可以回滚(事务)
		
	-- truncate table: 可以全表删除   
			
			1.不能带条件删除
						truncate table emp where id=1;  (这种写法错误)
		   
		    2.即可以删除表的数据,也可以删除表的约束 
		    		 例子:如果表中的数据id为自增的,此时id为11。
			 			  这时使用  truncate table stu 删除全表。
			 			  再次新增数据时,自增长约束重置,id则重新计数,id=1;(删除全表,影响自增长约束)
			
			3.使用truncate table删除的数据不能回滚

delete from stu truncate table stu
全表删除 可以 可以
带条件删除 可以 不可以
删除约束 不可以 可以
可以回滚 可以 不可以

4.2 查询数据

		1.查询所有列
			       SELECT * FROM student;
		
		2.查询指定列
				   SELECT id,NAME,gender FROM student;
		
		3.查询时添加常量列
		
					-- 需求: 在查询student表时添加一个班级列,内容为“java就业班”
				   SELECT id,NAME,gender,age,'java就业班' AS '年级'  FROM student;
		
		4.查询时合并列
					
				     -- 需求: 查询每个学生的servlet和jsp的总成绩
					SELECT id,NAME,(servlet+jsp) AS '总成绩' FROM student;

   					 -- 需求: 查询每个学生的servlet和jsp的总成绩大于100的人
					SELECT * FROM student where (servlet+jsp) >100 ;
					
					注意:1)合并列通常用于合并两个数值的总和。
						  2)合并列只能合并数值类型的字段,不能合并非数值类型的字段。

		
		5.查询时去除重复记录(DISTINCT)
		
					-- 需求: 查询学生的性别     男 女
					方式一:
							SELECT DISTINCT gender FROM student;
					方式二:
							SELECT DISTINCT(gender) FROM student;
					
					 注意:
								SELECT DISTINCT sex ,age FROM student;
								只有当sex,age两列都重复时,才被视为重复列。


		6.条件查询(where)
			 1)逻辑条件:and()   or()   not
				
						a.需求: 查询id为2,且姓名为李四的学生
							SELECT * FROM student WHERE id=2 AND NAME='李四'; -- 交集
	
						b. 需求: 查询id为2,或姓名为张三的学生
							SELECT * FROM student WHERE id=2 OR NAME='张三'; -- 并集
						
						c:需求 :查询成绩不大于200的学生
							SELECT * FROM student  where not(score>200);
						
			 2)比较条件: >   <   >=  <=  =  <>(不等于)     between and (等价于>= 且 <=)
	 				
		 				a.需求: 查询servlet成绩大于70分的学生
							SELECT * FROM student WHERE servlet>70;
	
						b.需求: 查询jsp成绩大于等于75,且小于等于90分的学生
							方式一:	
								SELECT * FROM student WHERE jsp>=75 AND jsp<=90;
							方式二:
								SELECT * FROM student WHERE jsp BETWEEN 75 AND 90; -- (包前包后)
							
						c.
							SELECT * FROM student WHERE gender<>'男';
						
						注意: BETWEEN 75 AND 90;  包前包后。  75<= x <=90
	
			3) 判空条件(null 空字符串):  is null / is not null / =''  / <>''
						
						a.需求: 查询地址为空的学生(包括null和空字符串)
						
							-- 判断null
							SELECT * FROM student WHERE address IS NULL ;
							-- 判断空字符串
							SELECT * FROM student WHERE address='';
						
						SELECT * FROM student WHERE address IS NULL OR address=''; -- (包括null和空字符串)
						
						b.需求: 查询有地址的学生(不包括null和空字符串)
						SELECT * FROM student WHERE address IS NOT NULL AND address<>'';

			
			4)模糊条件: like
						
						a.通常使用以下替换标记:
						-- % : 表示任意个字符
						-- _ : 表示一个字符
						
									-- 需求: 查询姓‘张’的学生
									SELECT * FROM student WHERE NAME LIKE '李%';
									
									-- 需求: 查询姓‘李’,且姓名只有两个字的学生
									SELECT * FROM student WHERE NAME LIKE '李_';

			5) IN
					显示在in列表中的值,例:in(100,200)
			
	例子:
		CREATE TABLE student(id INT ,NAME VARCHAR(20),chinese FLOAT,english FLOAT,math FLOAT);
		INSERT INTO student VALUES(1,'李红',98,34.2,84);
		INSERT INTO student VALUES(2,'白红',91,36.2,67);
		INSERT INTO student VALUES(3,'王帅',96,34.2,34);
		INSERT INTO student VALUES(4,'白鹭',94,56,34);
		INSERT INTO student VALUES(5,'螽斯',92,90.2,5);


		 --查询所有的学生
						SELECT * FROM student ;

		 --查询表中所有学生的姓名和英语成绩
						SELECT id ,NAME ,english FROM student;

		 --查询英语成绩大于等于90分的同学
						SELECT id ,NAME ,(chinese+math+english ) AS '总分' FROM student;

		 --查询总分大于200分的学生
						SELECT * FROM student WHERE  (chinese+math+english )>200

		 --查询所有姓白的学生
						SELECT * FROM student WHERE NAME LIKE '白%';

		 --查询英语>50 或者总分 >200 的学生
						SELECT * FROM student WHERE english >50 OR (chinese+math+english )>200;

		 -- 统计每个学生的总分
						SELECT id,NAME ,(chinese+math+english ) AS '总分' FROM student 

		 -- 在每个学生的总分上再加上10分的特长分。
						SELECT id,NAME ,(chinese+math+english +10) AS '总分' FROM student 


	7.聚合查询
 				常用的聚合函数: sum()  avg()  max()  min()  count()

				-- 需求:查询学生的servlet的总成绩 (sum() :求和函数)
				SELECT SUM(servlet) AS 'servlet的总成绩' FROM student;
				
				-- 需求: 查询学生的servlet的平均分
				SELECT AVG(servlet) AS 'servlet的平均分' FROM student;
				
				-- 需求: 查询当前servlet最高分
				SELECT MAX(servlet) AS '最高分' FROM student;
				
				-- 需求: 查询最低分
				SELECT MIN(servlet) AS '最低分' FROM student;
				
				-- 需求: 统计当前有多少学生(count(字段))
				SELECT COUNT(*) FROM student;
				
				SELECT COUNT(id) FROM student;
				
				
				注意:1.count()函数统计的数量不包含null的数据
							count(*) 统计表中每一列的数据有多少个,然后取最大值
							count(age) 统计age列的数据有多少个。
							
							所以从理论上来说,count(age)的效率要高于count(*)
						
						使用count(列)统计表的记录数,要使用不包含null值的字段

	8 分页查询(limit 起始行,查询几行)
				  SELECT * FROM student limit 起始行,查询几行;
				  起始行从0开始
				   
				  分页查询当前页的数据的sql				   
				  SELECT * FROM student LIMIT (当前页-1)*每页显示多少条,每页显示多少条;
				                       

							-- 需求: 查询第1,2条记录(第1页的数据)
							SELECT * FROM student LIMIT 0,2;
							-- 查询第3,4条记录(第2页的数据)
							SELECT * FROM student LIMIT 2,2;
							-- 查询第5,6条记录(第3页的数据)
							SELECT * FROM student LIMIT 4,2;
							-- 查询第7,8条记录 (没有记录不显示)
							SELECT * FROM student LIMIT 6,2;

   9.查询排序
   		
				 语法 :order by 字段 asc/desc
				 				asc: 顺序,正序。数值:递增,字母:自然顺序(a-z)
				 				desc: 倒序,反序。数值:递减,字母:自然反序(z-a)

					
				1)单个字段排序

								-- 默认情况下,按照插入记录顺序排序
								SELECT * FROM student;
								
								-- 需求: 按照id顺序排序
								SELECT * FROM student ORDER BY id ASC;
								SELECT * FROM student ORDER BY id; -- 默认正序
								
								SELECT * FROM student ORDER BY id DESC;-- 反序

				2)多个字段排序
		
								-- 需求: 按照servlet正序,按照jsp的倒序
								SELECT * FROM student ORDER BY servlet ASC,jsp DESC;
								
	10 分组查询(group by)
	
					-- 需求: 查询男女的人数
					-- 预期结果:
					  --  男   3
					  --- 女   2
					  -- 1) 把学生按照性别分组(GROUP BY gender)
					  -- 2) 统计每组的人数(COUNT(*))
					SELECT gender,COUNT(*) FROM student GROUP BY gender;



	  11 分组查询后筛选
	  
				-- 需求: 查询总人数大于2的性别
				-- 1) 查询男女的人数
				-- 2)筛选出人数大于2的记录(having)
				--- 注意: 分组之前条件使用where关键字,分组之前条件使用having关键字
				SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>2;

4.3 数据做基础运算

		
	基础运算:
		查询时做基础运算
				SELECT chinese + english  FROM student	
				SELECT chinese / english  FROM student	
				SELECT chinese * english  FROM student	
		
		修改时做基础运算
				UPDATE student SET chinese=chinese+english 	
				UPDATE student SET chinese=chinese/english 	
				UPDATE student SET chinese=chinese*10

	注意:
		1.基础运算时,两列数据类型必须都为数字类型。	
		2.基础运算时,如果有一列数据为null,则结果为null
		
					eg:chinese  english   chinese+english
						  10		null       null
						  20		30         50
						  null		30		   null
						  30		0		   30
						  

在这里插入图片描述

五、MySql乱码管理

	
	mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、
	system。
			client是客户端使用的字符集。 
			connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型
			就按照服务器端默认的字符集设置。       
			database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安
			装时指定的字符集设置。    
			results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符
			集。       
			server是服务器安装时指定的默认字符集设定。       
			system是数据库系统使用的字符集设定。

	MySql乱码管理,查看和修改数据库字符集:
		show variables like 'character%';
		set character_set_results=gbk;
		set character_set_client=gbk; 

发布了94 篇原创文章 · 获赞 0 · 访问量 646

猜你喜欢

转载自blog.csdn.net/weixin_45602227/article/details/104131707