简单的sql语句大全

1.MySql的服务怎么开启和关闭

1.找到服务 运行窗口输入services.msc
2.开启服务 dos窗口(管理员)中,输入:net start mysql
3.关闭服务 dos窗口(管理员)中,输入:net stop mysql

2.数据库结构的操作

1.查看有哪些数据库?    show databases;
2.创建一个新的数据库?   create database 数据库的名字;			
3.查看数据库的创建细节(查看创建数据库的sql语句长什么样)?
			         show create database 数据库的名字;		
4.删除数据库?   		 drop database 数据库名字;
5.指定使用的数据库?		use 数据库名字;

3.表结构的操作

常见的数据类型?

					int
					/
					date:精确到年月日
					datetime:精确到年月日时分秒
					timestamp:精确到年月日时分秒,如果没有赋值,会按照当前系统时间自动填充
					varchar(20)	
1.查看数据库中有哪些表?		show tables;
2.创建一张表?   create table 表名 (
					字段名 数据类型,
					字段名 数据类型,
					... ...
				);				
				create table person (
					name varchar(20),
					age int
				);
3.查看表的创建细节(创建表使用的sql语句是什么)?
				show create table 表名;
4.查看表结构?	desc 表名;
5.在原表的基础之上,增加一个新的字段?
				alter table 表名 add 字段名 数据类型;
				alter table person add sex varchar(20);
6.在原表的基础之上,修改字段的名字?
			alter table 表名 change 原字段名 新字段名 数据类型;	
			alter table person change sex gender varchar(20);
7.在原表的基础之上,修改字段的数据类型?
			alter table 表名 change 原字段名 新字段名 数据类型;
			alter table person change gender gender int;
			alter table 表名 modify 字段名 数据类型;
			alter table person modify gender varchar(20);
8.在原表的基础之上,删除某个字段?
			alter table 表名 drop 字段名;
			alter table person drop gender;
9.修改表的名字?
			rename table 原表名 to 新表名;
			rename table person to user;	
10.删除指定的表?
			drop table 表名;

4.表中的数据的增加

1.添加一条记录
a. insert into 表名 (字段名, 字段名, ...) values (数据1, 数据2, ...);
	insert into user (name, age) values ('tom', 18);

b. insert into 表名 values (数据1, 数据2, ...);
	insert into user values ('rose', 19);
				   
注意:有多少个字段,就要给多少个值
注意:如果添加中文内容,在添加之前设置编码:set names gbk;
			
2.添加多条记录
a. insert into 表名 (字段名, 字段名, ...) values (数据1, 数据2, ...), (数据1, 数据2, ...),..;
	insert into user (name, age) values ('jack', 20), ('tony', 21);
			
b. insert into 表名 values (数据1, 数据2, ...), (数据1, 数据2, ...),...;

5.表中的数据的修改

修改操作:update ... set ...
1.修改所有记录
	a. update 表名 set 字段名=值;
		update user set age = 18;
		update user set name = 'tom';
		update user set name = 'jerry', age = 19;
			
2.修改一条记录
	a. update 表名 set 字段名=值 where 字段名=值;
		 需求:将名字为jerry的年龄改为20
		update person set age=20 where name='jerry';

6.表中的数据的删除

删除操作:delete from ...
	1.删除所有记录
		a. delete from 表名;
			delete from person;
				   
		b. truncate 表名;
			truncate person;
注意:这条sql语句属于DDL里的
				   
a和b有什么区别?
		a的删除所有是逐行删除
		b的删除所有是先将整张表给删除,然后再重新创建一张新的表
			
2.删除一条记录
		a. delete from 表名 where 字段名=值;
			 需求:删除名字为tom的那条记录
			delete from person where name = 'tom';
			 需求:删除年龄为20的那条记录
			delete from person where age = 20;
			 需求:删除年龄为18,名字为jerry的那条记录
			delete from person where name = 'jerry' and age = 18;

7.表中的数据查找

单表查询
	简单查询:
	a. select * from 表名; 查询表中所有的记录信息
		select * from person;
					  
	b. select 字段名,字段名,... from 表名; 查询表中的所有记录信息(某些字段)
		select name, age from person;
条件查询:
		条件查询:
		 	常用的条件?
			=
			>
			<
			>=
			<=
			!=, <>
			between...and...
			in ()
			is null
			is not null
			and, &&
			or, ||
			distinct
			like:模糊查询
			as:起别名
各种查询
create table user (
				id int,
				name varchar(20),
				age int,
				sex varchar(20)
			);
			
			insert into user values(1, 'tom', 18, '男');
			insert into user values(2, 'jerry', 20, '男');
			insert into user values(3, 'rose', 17, '女');
			insert into user values(4, 'jack', 21, '男');
			insert into user values(5, 'tony', 22, '男');
			insert into user values(6, 'mary', 28, '女');
			
		需求:查询表中的名字为jack的那条记录信息
			select * from user where name = 'jack';
			
		需求:查询表中年龄为18岁的记录信息
			select * from user where age = 18;
			
		需求:查询表中年龄大于20岁的记录信息
			select * from user where age > 20;
			
		需求:查询表中年龄小于20岁的记录信息
			select * from user where age < 20;
			
		需求:查询表中年龄大于等于20的记录信息
			select * from user where age >= 20;
			
		需求:查询表中年龄小于等于20的记录信息
			select * from user where age <= 20;
			
		需求:查询表中年龄不等于20岁的记录信息
			select * from user where age != 20;
			select * from user where age <> 20;
			
		需求:查询表中姓名不为tom记录信息
			select * from user where name != 'tom';
			
		需求:查询表中年龄在20岁到25岁之间的记录信息
			select * from user where age between 20 and 25;
			select * from user where age >= 20 and age <= 25;
			
		需求:查询表中年龄为18,21,28的记录信息
			select * from user where age in (18, 21, 28);
			select * from user where age = 18 or age = 21 or age = 28;
			
		需求:查询表中姓名为tom,rose,tony的记录信息
			select * from user where name in ('tom', 'rose', 'tony');
			
		需求:查询表中性别为null的记录信息
			select * from user where sex is null;
		
			注意:select * from user where sex = null; --错误写法
			
		需求:查询表中性别不为null的记录信息
			select * from user where sex is not null;

		需求:查询表中姓名为tom,年龄为20岁的记录信息
			select * from user where name = 'tom' and age = 20;
			select * from user where name = 'tom' && age = 20;
			
		需求:查询表中姓名为tom,或者年龄为20岁的记录信息
			select * from user where name = 'tom' or age = 20;
			select * from user where name = 'tom' || age = 20;
			
		需求:查询表中看一看有哪些年龄段
			select distinct age from user;
			
			注意:distinct是去重的意思
			
			select distinct age, name from user; --针对age和name相同的去重
			
		需求:查询表中名字中第二个字带'三'字的记录信息
			select * from user where name like '_三%';
			
			_:代表任意一个字符
			%:代表任意0到多个的字符
			
		需求:查询表中名字为三个字,并且第二个字带'三'的记录信息
			select * from user where name like '_三_';
			
		需求:查询表中名为带'三'的记录信息
			select * from user where name like '%三%';
			
		需求:查询表中名字姓'张'的记录信息
			select * from user where name like '张%';
			
		需求:查询表中所有的记录信息(给字段起别名)
			select * from user;
			
			select id, name, age, sex from user; 
			select id as 编号, name as 姓名, age as 年龄, sex as 性别 from user;
			select id 编号, name 姓名, age 年龄, sex 性别 from user;
		
		需求:查询表中所有的记录信息(给表起别名)
			select * from user;
			select user.id, user.name, user.age, user.sex from user;
			select * from user as u;
			select u.id, u.name, u.age, u.sex from user as u;

8.复杂的条件查询

a.聚合函数
           count():统计
				需求:查询user表中有多少个用户
					select count(*) from user;
					select count(id) from user;
					select count(1) from user;
			
			sum():求和
				需求:查询表中所有的年龄总和为多少
					select sum(age) from user;
			
			max():最大值
				需求:查询表中年龄最大的记录信息
					select max(age) from user;
			
			min():最小值
				需求:查询表中年龄最小的记录信息
					select min(age) from user;
			
			avg():平均值
				需求:查询表中年龄平均值为多少
					select avg(age) from user;
		
		b.排序查询
			order by 字段名 排序方式
				排序方式:
					升序:asc
					降序:desc
					
				注意:默认是升序的
					
			需求:根据年龄进行升序排列
				select * from user order by age;
				select * from user order by age asc;
				
			需求:查询年龄为17,18,28的信息,并且按照年龄升序排列
				select * from user where age in (17, 18, 28) order by age asc;
				
			需求:根据年龄进行降序排列
				select * from user order by age desc;
				
			需求:根据姓名字典顺序进行排序
				select * from user order by name asc;
				
			需求:根据年龄由大到小,如果年龄相同,再根据姓名字典顺序排序
				select * from user order by age desc, name asc;
		
		c.分组查询
			group by 分组的字段
			
			需求:按照性别进行分组,查询出每组的人数是多少
				select count(*) from user group by sex;
				select sex, count(*) from user group by sex;
				
				select id, name, age, sex, count(*) from user group by sex; --这么写没有意义
				注意:一般使用分组查询,查询出来的是聚合函数,或者根据分组字段的字段信息
				
			需求:按 照年龄进行分组,查询出每组的人数是多少
				select count(*) from user group by age;
				select age, count(*) from user group by age;
				
			需求:按照年龄进行分组得到每组的人数,要求每组的每个人的年龄要大于20岁
				  (对20岁以上的人按照年龄进行分组,得到每组的人数)?
				  先筛选,后分组
				       select age, count(*) from user where age > 20 group by age;
				
			需求:按照年龄进行分组得到每组的人数,要求每组的人数必须大于等于2
				  先分组,后筛选
				       select age, count(*) from user group by age having count(*) >= 2;
				
			需求:按照年龄进行分组得到每组人数,要求每组的每个人的年龄大于18,并且分组之后每组的人数大于等于2
				  先筛选,然后再分组,最后再筛选
				
				       select age, count(*) from user where age > 18 group by age having count(*) >= 2;
				
			where和having的区别?
				1.where是在分组之前进行条件判断,having是在分组之后进行条件判断
				2.where只能写在group by的前面,having只能写在group by的后面
				3.where后面不能写聚合函数,having后面可以写聚合函数
		
		d.分页查询
			limit 起始个数, 每页显示的条数;
			
			需求:查询第一页的记录
				select * from user limit 0, 3;
			
			需求:查询第二页的记录
				select * from user limit 3, 3;
			
			需求:查询第三页的记录
				select * from user limit 6, 3;
			
			需求:查询第N页的记录
				select * from user limit (N-1) * 每页显示的条数, 每页显示的条数;

9.约束条件

1.默认值
	default 
	
	加与不加有什么区别?
		不改默认NULL 改变默认值自定义
		
		mysql> create table person1 (
    		id int,
   			 name varchar(32),
   			 country varchar(32) default "PRC" #在一个数据类型的后面 跟一个默认值
    -> );
    
    
2.非空约束
	not null
	
	加与不加有什么区别?
		加了非空约束,值就不能为NULL
		
	在创建表时候添加非空约束?
		create table user (
			name varchar(20) not null,
			age int
		);
		
	删除非空约束?
		alter table user modify name varchar(20);
		
	在创建表之后再去添加非空约束?
		alter table user modify name varchar(20) not null;

3.唯一约束
	unique
	
	加与不加有什么区别?
		加了唯一约束之后,这一列的值不能有重复的
		
	在创建表的时候添加唯一约束?
		create table user (
			name varchar(20) unique,
			age int
		);
		
	删除唯一约束?
		alter table user drop index name;
		
	在创建表之后再添加唯一约束?
		alter table user modify name varchar(20) unique;

4.主键约束
	primary key
	
	加与不加有什么区别?
		加了主键约束,就代表非空且唯一
		
		每张表中只能有一个主键
		
	在创建表的时候添加主键约束?
		create table user (
			id int primary key,
			name varchar(20)
		);
		
	删除主键约束?
		alter table user drop primary key;
		
	在创建表之后再去添加主键约束?
		alter table user modify id int primary key;
		
5.自动增长
	auto_increment
	
	加与不加有什么区别?
		加了自动增长,会自动+1
		
	在创建表的时候添加自动增长?
		create table user (
			id int primary key auto_increment,
			name varchar(20)
		);
		
	删除自动增长?
		alter table user modify id int;
		
	在创建表之后再去添加自动增长?
		alter table user modify id int auto_increment;
		
	删除表中的所有记录?
		1.delete from user;
		2.truncate user;

6.外键约束
	外键约束是建立在有两张表的基础之上的
	
	格式:
		constraint 外键的名字 foreign key (外键字段) references 另外一张表名(字段);
	简化格式:
		foreign key (外键字段) references 表名(字段);
	
	在创建表的时候添加外键约束?
		create table user (
			id int primary key,
			name varchar(20)
		);
		
		create table computer (
			id int primary key,
			name varchar(20),
			uid int,
			constraint c_u_key foreign key (uid) references user(id)
		);
		
	删除外键约束?
		alter table computer drop foreign key c_u_key;
		
	在创建表之后再去添加外键约束?
		alter table computer add constraint c_u_key foreign key (uid) references user(id);
		

10.时间数据类型

类型格式用途默认值
date(出现频率偏高)YYYY-MM-DD2023-04-08
timeHH:MM:SS16:45:03
yearYYYY2023
datetimeYYYY-MM-DD hh:mm:ss
timestamp(出现频率偏高)YYYY-MM-DD hh:mm:ss2023-04-08 16:47:08current_timestamp

11.级联操作

建表的时候加级联操作
on delete cascade,//级联删除
on update cascade,//级联修改

12.联表查询(查不用级联)

#联表查询  查看 erbei 属于哪个部门
select emp.emp_name, dept.dept_name  # 查什么
from emp, dept  #从哪查
where emp.dept_id = dept.dept_id and emp.emp_name = "erbei" #查询的条件

#找出教学部有有哪些人
select d.dept_name, e.emp_name
from dept d, emp e
where d.dept_id = e.dept_id  and d.dept_name= "教学部";

13.内外连接

也是牵涉多表联查,只不过换了一种写法而已
inner join 与 join 是相同的

内连接  内连接  内连接  内连接  内连接  内连接  内连接

#联表查询  查看 erbei 属于哪个部门
select e.emp_name, d.dept_name 
from emp  e
inner join dept d
on  e.dept_id = d.dept_id
where e.emp_name = "erjia";

#找出教学部有有哪些人
select d.dept_name, e.emp_name
from dept d
join emp e
on d.dept_id = e.dept_id
where d.dept_name= "教学部";


外连接   外连接   外连接   外连接   外连接   外连接
#左外连接 和右外连接
#LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行
select *
from dept d
left outer join emp e
on d.dept_id = e.dept_id;#左外连接

select *
from emp e
right outer join dept d
on e.dept_id = d.dept_id;#右外连接

13.开发中的多白表联查

1.多表之间的关系?
	一对一
	一对多(多对一):
		比如:
			用户表和电脑表
			古代的老公表和老婆表
	多对多:
		比如:学生表和老师表
			  一个学生可以被多个老师教
			  一个老师也可以教多个学生
多对多的关系设计原则:要额外创建一张新的表,去分别关联另外的两张表


#一对多   一对多   一对多   一对多   一对多   一对多   一对多
mysql> create table teacher (
    -> t_id int primary key auto_increment,
    -> t_name varchar(32)
    -> );

mysql> create table student(
    -> s_id int primary key auto_increment,
    -> s_name varchar(32),
    -> teacher_id int
    -> );


#老邢带学生有哪些?
写法1
select teacher.t_name, student.s_name
from teacher, student 
where teacher.t_id = student.teacher_id and teacher.t_name = "老邢";


写法2

select t.t_name,s.s_name
from teacher t
inner join student s
on t.t_id = s.teacher_id
where t.t_name = "老邢";

#多对多   多对多   多对多   多对多   多对多   多对多   多对多
mysql> create table stu (
    -> s_id int primary key auto_increment,
    -> s_name varchar(32)
    -> );

mysql> create table course (
    -> c_id int primary key auto_increment,
    -> c_name varchar(32)
    -> );

mysql> create table stu_course (
    -> id int primary key auto_increment,
    -> s_id int,
    -> c_id int
    -> );

#需求:  司马懿选了哪些课程
方法1
select stu.s_name, course.c_name
from stu, stu_course, course
where stu.s_id = stu_course.s_id and stu_course.c_id = course.c_id and stu.s_name = "司马懿";

方法2
select s.s_name, c.c_name
from stu s
inner join stu_course sc
on s.s_id  = sc.s_id
inner join course c
on sc.c_id = c.c_id
where s.s_name = "司马懿";

#挖掘机被哪些人选了
select c.c_name, s.s_name
from course c
inner join stu_course sc
on c.c_id = sc.c_id
inner join stu s
on sc.s_id = s.s_id
where c.c_name = "挖掘机";
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值