MySQL>DDL、DML、DQL语句的使用

数据库 
显示所有
show databases

SQL的三种注释方式
-- 注释内容
# 注释内容
/* 注释内容 */

SQL分类
DDL(Data Difinition Language) 数据定义语言
	用来定义数据库对象:数据库,表,列等
		如:create drop alter等
DML(Data Manipulation Language) 数据操纵语言
	用来对数据库中表的数据,进行增删改查的操作
		如:insert delete update
DQL(Data query language) 数据查询语言
	用来查询数据库中表的数据
		如:select where

DCL(Data Control language) 数据控制语言
	用来定义数据库的访问权限和安全级别
		如:revoke(撤销) grant(授予)




---------------------------------------------------------------------------------------------
DDL:操作数据库、表
	CRUD -> 操作库 -------------------------
	C:Create创建
		create database databaseName; 
			-> 创建数据库,名字是databaseName
		create database if not exists student_name; 
			-> student_name库,存在则不创建,不存在则创建
		create database datalib_name character set gbk/utf8 ;
			-> 创建数据库,并且指定字符集
		create database if not exists datalib_name character set gbk/utf8 ;
			-> 创建指定的数据库,判断其是否存在,存在则不创建,不存在则创建,并指定其字符集
		
	R:Retrieve 检索 查询
		show databases; ->查询所有数据库
		show create database mysql; -> 查询此数据库的创建语句,及编码集
		
	U:Update 更新 
		alter database datalib_name character set utf8;
			-> 将数据库的字符集更改为utf-8
	
	D:Delete 删除
		drop database datalib_name;
			-> 删除某个数据库
		drop database if exists datalib_name;
			-> 删除某个存在的数据库
			
	Use:使用数据库
		select database();
			-> 查询正在使用的数据库
		use datalib_name;
			-> 使用数据库
	
	CRUD -> 操作表	-------------------------
	C:Create创建
		create table table_name(
			列名1 数据类型,
			列名2 数据类型,
			...
			列名n 数据类型n
		);
		注意:最后不要写逗号
		
		create table table_name01 like table_name_source;
			-> 创建一个表,复制table_name_source中的内容
		
	R:Retrieve 检索 查询
		show tables; 
			-> 查询所有表
		desc table_name;
			-> 查询表接口
		
	U:Update 更新 
		alter table old_table_name rename to new_table_name;
			-> 更新表名称
			
		alter table table_name character set gbk/utf8;
			-> 将表的字符集格式更改为gbk/utf8
			
		alter table table_name add column_name data_type;
			-> 增加一列,数据类型为data_type
			
		alter table table_name drop column_name;
			-> 删除一列
			
		alter table table_name change old_column_name new_column_name data_type;
			-> 将 old_column_name 更改为 new_column_name 数据类型更改为 data_type
		alter table table_name modify column_name data_type
			-> 只是更改了一下类型
			
	D:Delete 删除
		alter table table_name drop column_name;
			-> 删除一列
DML增删改,表中的数据
	添加数据
		insert into table_name(col_name_1,col_name_2,col_name_3 , ... , column_name_n) 
		value(value_1,value_2,value_3 ... value_n);
			-> 添加一条数据,如果需要全部添加则table_name后无需跟小括号
	删除数据
		delete from table_name where score = 1;
			-> 删除score为1的记录
			如果不加条件,则删除全部数据
		truncate table table_name; 
			-> 删除表中全部数据建议使用此命令
				删除表,在创建一个一模一样的表
	修改数据
		update table_name set column_name = value where field = value;
			-> column_name = value 需要修改的列和值
			-> field = value 需要修改的列的字段的限制条件
			
DQL查询表中的记录
	select * from table_name;
		-> 查询所有;
	1、语法
	select
		field(字段)
	from
		table_name_01,table_name_02 ... 
	where
		condition(条件列表)
	group by
		group field(分组字段)
	having
		group after condition (分组之后的条件)
	order by
		排序
	limit
		分页限定
		
	
	
	2、基础查询
		2.1 多个字段的查询
		select field_01 , field_02 ... ifnull(field_n,0) as other_name from table_name
			-> 查询字段1到字段n的结果集,如果字段n为null,将值替换为可以替代的类型 other_name
			例:
				select name,math_score,english_score,math_score+ifnull(english_score,0) 
				as sum_score from student;
					-> 查询 name,math_score,english_score 和 math_score + english_score 的和,
					如果english_score的值为空,则替换为0
					-> 并给此列命名一个别名 sum_score
					
		2.2 去除重复的值
		select distinct field_name from table_name;
			-> 去除重复的值
			
		2.3 计算列
		select name,math_score,english_score,math_score+ifnull(english_score,0) as sum_score from student;
			-> 计算math_score+ifnull(english_score,0)
			-> ifnull(english_score,0) english_score:这个字段可能出现空值 0:在该字段出现null值的时候 用0替换
			
		2.4 起别名
			select name as other_name from table;
			-> name 字段 查询的结果集定义一个其他的名字
	3、条件查询
		3.1 运算符
		><<=>==<> <>在 SQL 中表示不等于,在 mysql 中也可以使用!=
		BETWEEN...AND 在一个范围之内,如:between 100 and 200
		相当于条件在 100 到 200 之间,包头又包尾
		IN(集合) 集合表示多个值,使用逗号分隔
		LIKE '张%' 模糊查询
		IS NULL 查询某一列为 NULL 的值,注:不能写=NULL
		 具体操作:
			-- 查询 math 分数大于 80 分的学生
			select * from student3 where math>80;
			-- 查询 english 分数小于或等于 80 分的学生
			select * from student3 where english <=80;
			-- 查询 age 等于 20 岁的学生
			select * from student3 where age = 20;
			-- 查询 age 不等于 20 岁的学生,注:不等于有两种写法
			select * from student3 where age <> 20;
			select * from student3 where age != 20;
	
		3.2 逻辑运算符
			and 或 && 与,SQL 中建议使用前者,后者并不通用。
			or 或 || 或
			not 或 ! 非  具体操作:
			 具体操作:
				-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
				select * from student3 where age>35 and sex='男';
				-- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
				select * from student3 where age>35 or sex='男';
				-- 查询 id 是 1 或 3 或 5 的学生
				select * from student3 where id=1 or id=3 or id=5;
		3.3 in 关键字
			SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2...);
			in 里面的每个数据都会作为一次条件,只要满足条件的就会显示
			 具体操作:
				-- 查询 id 是 1 或 3 或 5 的学生
				select * from student3 where id in(1,3,5);
				-- 查询 id 不是 1 或 3 或 5 的学生
				select * from student3 where id not in(1,3,5);
		3.4 范围查询
			BETWEEN 值 1 AND 值 2
			表示从值 1 到值 2 范围,包头又包尾
			比如:age BETWEEN 80 AND 100 相当于: age>=80 && age<=100
			 具体操作:
				查询 english 成绩大于等于 75,且小于等于 90 的学生
				select * from student3 where english between 75 and 90;
		3.5 like 关键字
			LIKE 表示模糊查询
			SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
			 MySQL 通配符
			通配符 说明
			% 匹配任意多个字符串
			_ 匹配一个字符
			 具体操作:
				-- 查询姓马的学生
				select * from student3 where name like '马%';
				select * from student3 where name like '马';
				-- 查询姓名中包含'德'字的学生
				select * from student3 where name like '%德%';
				-- 查询姓马,且姓名有两个字的学生
				select * from student3 where name like '马_';
	4、排序查询
		4.1 Order by
			select * from table_name order by field_01 desc , field_02 asc;
			--> desc:降序		asc: 升序
			--> field_01 desc 是第一条件,当第一条件有相同时,使用第二条件field_02 asc
			
	5、聚合函数
		5.1 count 计算个数
		--> select count(field) from table_name;
		--> select count( ifnull( field ) ) from table_name;
		
		5.2 max 计算最大值
		--> select max(field) from table;
		
		5.3 min 计算最小值
		--> select min(field) from table;
		
		5.4 sum 计算和
		--> select sum(field) from table;
		
		5.5 avg 计算平均值
		--> select avg(field) from table;
		
		-->聚合函数的计算排除了空值,null
	6、group by
		6.1  select field_1,count(field_2) from table_name group by field_1;
		--> 以field_1进行分组,分组之后显示field_1,统计field_2
		--> 分组之后,不要加其他字段,要不加聚合函数,要不加分组所用字段
		
	7、having
		select field_1,count(field_2) from table_name group by field_1 having count(field_2) > 2;
		--> 分组之后条件限制,限制本组个数大于2条记录的显示出来
	
	8、limit (这是一个方言,适用于MySQL)
		select * from table_name limit start_index,page_number;
		



	数据类型:
		1. int:整数类型
			age int,
		2. double:小数类型
			score double(5,2)
		3. date:日期,只包含年月日,yyyy-MM-dd
		4. datetime:日期,包含年月日时分秒	 yyyy-MM-dd HH:mm:ss
		5. timestamp:时间错类型	包含年月日时分秒	 yyyy-MM-dd HH:mm:ss	
			如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

		6. varchar:字符串
			name varchar(20):姓名最大20个字符
			zhangsan 8个字符  张三 2个字符
			

数据类型


猜你喜欢

转载自blog.csdn.net/weixin_43309893/article/details/116380597