SQL语句

1.表结构

//创建表
creat table tb_emp1(
	id int(11);
    name varchar(25);
    deptld int(11);
    salary float;
);

//修改表结构
alter table <表名> [修改选项];
修改选项:
add column <列名> <列类型>
drop column <列名> 
change column <旧列名> <新列名> <新列类型>
alter column <列名> {set default <默认值>|drop default}
rename to <新表名>
add primary key (<字段名>)
drop primary key 
//删除表
drop table [if exists] 表1[,表2,表3....];

//主键约束:主键是表的一个特殊字段,可以唯一标识该表中的每条信息。
//外键约束:外键约束经常与主键约束一起使用,用来确保数据的一致性。
//设置单字段主键且自增长
creat table tb_emp1(
	id int(11) primary key auto_increment;
    name varchar(25);
    deptld int(11);
    salary float;
);
//设置联合主键   例如:成绩表中学号+课程号
creat table tb_emp1(
	id int(11);
    name varchar(25);
    deptld int(11);
    salary float;
    primary key(name,depld)
);
//算数运算符:+ - * / %和mod
//逻辑运算符:not和!,and和&& ,or和||,xor
between and, in, not in
//聚合函数
max,min,count(统计查询结果行数),sum,avg

2.表数据

//查询
select {*|<字段列名>} 
[
    from <表1>,<表1>....
    [
        [where <表达式>
        [group by <group by definition>
        [having <expression> [{<operator> <experssion>....}]]
        [order by <order by definition>]
        [limit [<offset>],] <row count>]
]
order by:按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)和降序(DESC),默认情况下是升序。order by  <字段名> [asc|desc]
distinct:去重,selcet distinct <字段名> from <表名>
as:设置别名,<字段名> as <别名>
条件查询:where 查询条件
查询条件:
        带比较运算符和逻辑运算符的查询条件
        带 between and的查询条件
        带 is null的查询条件
        带 in的查询条件
        带 like的查询条件  like “字符串”;
group by:如何显示查询出来的数据, 并按照指定的字段分组。
     where 和 HAVING 关键字也存在以下几点差异:
		一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。
		where 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。
		WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。
		WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
		WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。  
//多表查询
  select <字段名> from <表1> cross join <表2> [where子句] 交叉连接一般不采用   
  select <字段名> from <表1> inner join <表2> [on子句] 内连接一般采用,inner可省略   on 子句:用来设置内连接的连接条件
  select <字段名> from <表1> left join 或 right join <表2> <on子句>  使用外连接查询时,一定要分清需要查询的结果,是需要显示左表的全部记录还是右表的全部记录,然后选择相应的左连接和右连接。
//子查询
 where <表达式> <操作符> (子查询)操作符可以是比较运算符和 in、not in、 exists、 not exists 等关键字。
        
        
//插入数据
insert into <表名> [ <列名1> [ , … <列名n>] ] VALUES (值1) [… , (值n) ];   数据清单中数据的顺序要和列的顺序相对应。
//修改数据
update <表名> set 字段1=值1 [,...] [where 子句] [order by 子句] [limit 子句]
//删除数据
delete from <表名> [where 子句] [order by 子句] [limit 子句]

3.视图

//创建视图
create view <视图名> as <select 语句> 
//查看视图
desc 视图名
//修改视图
alter view <视图名> as <select 语句>
//删除视图
drop view <视图名1> [ , <视图名2> …]

4.存储过程和触发器

一个存储过程是一个可编程的函数,它在数据库中创建并保存,一般由 SQL 语句和一些特殊的控制结构组成。
//创建存储过程
create procedure <过程名> ( [过程参数[,…] ] ) <过程体>    //过程体以 begin end //
[过程参数[,…] ] 格式
[ in | out | inout ] <参数名> <类型>
create procedure getScore
begin
select student_score from tb
	where st_name=name;
end
//修改存储过程
alter procedure 存储过程名 [ 特征 ... ]
//删除存储过程
drop procedure [ if exists ] <过程名>

存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合。存储函数可以通过 return 语句返回函数值,主要用于计算并返回一个值。而存储过程没有直接返回值,主要用于执行操作。
create function 函数名 ([参数[...]])
returns type
[characteristic ...] SQL 代码
	create function func_student(id INT(11))
		returns VARCHAR(20)
		comment '查询某个学生的姓名'
		begin
		return(select name from tb_student where tb_student.id = id);
		end //
//调用存储过程
call 函数名([参数[...]]);

//定义变量
declare 变量名[,...] 类型 [default 值]
//变量赋值
set 变量=值

个人理解游标就是一个标识,用来标识数据取到了什么地方。

IF语句
if search_condition then statement_list
    [elseif search_condition then statement_list]...
    [else statement_list]
end if

CASE语句
case case_value
    when when_value then statement_list
    [when when_value then statement_list]...
    [else statement_list]
end case

MySQL 的触发器和存储过程一样,都是嵌入到 MySQL 中的一段程序,通过对数据表的相关操作来触发、激活从而实现执行。
//创建触发器
create trigger <触发器名> < before | after >
<insert | update | delete >
on <表名> for each row<触发器主体>
//删除触发器
drop trigger [ if exists ] [数据库名] <触发器名>
posted @ 2023-03-11 16:25  熬夜大能手  阅读(82)  评论(0编辑  收藏  举报