SQL常用语句

本文详细介绍了SQL数据库的基本操作,包括查看和切换数据库、创建与删除数据库、操作表结构、数据的增删改查、子查询、连接查询以及聚合函数等。还探讨了查询语句的执行顺序和各种条件过滤,是数据库初学者和进阶者的重要参考资料。
摘要由CSDN通过智能技术生成

数据库操作

查看所有数据库

show databases;

查看当前使用的数据库

select database();

创建数据库

create database database_name;

删除数据库

drop database_name;

使用数据句库

use database_name;

查看数据库中所有表

show tables;

表的操作

desc table_name;

创建表结构的语法------SQL数据类型

create table table_name(
	列名称1 数据类型,
	列名称2 数据类型,
	列名称3 数据类型,
	....
);

修改表–添加字段

alter table table_name add 列名 类型;
demo:alter table students add birthday datetime;

修改表–修改字段–重命名版

alter table table_name change 原名 新名 类型及约束;
demo:alter table students change birthday birth datetime not null;

修改表–修改字段–不重命名

alter table table_name modify 列名 类型及约束;
demo : alter table students modify birth date not null;

删除表–删除字段

alter table table_name drop 列名;
demo :later table students drop birthday;

删除表

drop table table_name;

查看表的创建语句–详细过程

show create table table_name;

查询基本使用

查询
查询所有列

select * from table_name;

查询指定列

select1,2, ... from table_name;

增加
说明:主键列是自动增长,但是在全列插入时需要占位,通常使用空值(0或者null) ; 字段默认值 default 来占位,插入成功后以实际数据为准
全列插入:值的顺序与表结构字段的顺序完全一一对应
此时字段名列表不用填写

insert into table_name values (...);
例:
insert into students values(0,’郭靖‘,1,'蒙古','2016-1-2');

部分列插入:值的顺序与给出的列顺序对应

insert into table_name (1,...) values(1,...);
例:
insert into students(name,hometown,birthday) values('黄蓉','桃花岛','2016-3-2');

全列多行插入

insert into table_name values(...),(...)...;
例:
insert into classes values(0,'python1'),(0,'python2');

部分列多行插入

insert into table_name(1,...) values(1,...),(1,...)...;
例:
insert into students(name) values('杨康'),('杨过'),('小龙女');

修改

update table_name set1=1,2=2... where 条件;
例:
update students set gender=0,hometown='北京' where id=5;

删除

delete from table_name where 条件;
例:
delete from students where id=5;

逻辑删除,本质就是修改操作

update students set isdelete=1 where id=1;

as关键字
使用 as 给字段起别名

select id as 序号, name as 名字, gender as 性别 from students;

可以通过 as 给表起别名

select s.id,s.name,s.gender from students as s;

条件语句查询

where后面支持多种运算符,进行条件的处理
比较运算符
逻辑运算符
模糊查询
范围查询
空判断

比较运算符
等于: =
大于: >
大于等于: >=
小于: <
小于等于: <=
不等于: != 或 <>

逻辑运算符
and
or
not

模糊查询
like
%表示任意多个任意字符
_表示一个任意字符

范围查询
范围查询分为连续范围查询和非连续范围查询

  1. in表示在一个非连续的范围内
  2. between … and …表示在一个连续的范围内

例:查询编号为3至8的学生

select * from students where id in(1,3,8);

例:查询编号是3至8的男生

select * from students where (id between 3 and 8) and gender=1;

空判断
判断为空
例:查询没有填写身高的学生

select * from students where height is null;

注意:

  1. null与’'是不同的
  2. is null是判断为空,判断非空is not null

优先级:

优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
and比or先运算,如果同时出现并希望先算or,需要结合()使用

排序

排序查询语法:

select * from table_name order by1 asc|desc [,2 asc|desc,...];

语法说明:

将行数据按照列1进行排序,如果某些行 列1 的值相同时,则按照 列2 排序,以此类推
asc从小到大排列,即升序
desc从大到小排序,即降序
默认按照列值从小到大排列(即asc关键字)

分页

分页查询语法:

select * from table_name limit start,count;

说明:

从start开始,获取count条数据
start默认值为0
也就是当用户需要获取数据的前n条的时候可以直接写上 xxx limit n;

聚合函数

总数
count(*) 表示计算总行数,括号中写星与列名,结果是相同的

最大值
max(列) 表示求此列的最大值

最小值
min(列) 表示求此列的最小值

求和
sum(列) 表示求此列的和

平均值
avg(列) 表示求此列的平均值

分组

group by 语句用于结合合计函数,根据一个或多个列对结果集进行分组。示例

group by + having
having 条件表达式:用来过滤分组结果
having作用和where类似,但having只能用于group by 而where是用来过滤表数据。
having后面可以跟聚合函数,而where后面不能跟聚合函数。

连接查询语法

SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行
  • SELF JOIN:用于将表连接到自己,就好像该表是两个表一样,临时重命名了SQL语句中的至少一个表
  • CARTESIAN JOIN:从两个或多个连接表返回记录集的笛卡儿积

连接查询语法:

select * from1 innerleftright join2 on1.列 运算符 表2.

子查询

在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句,外部那个select语句则称为主查询。

主查询和子查询的关系:

子查询是嵌入到主查询中
子查询是辅助主查询的,要么充当条件,要么充当数据源
子查询是可以独立存在的语句,是一条完整的 select 语句

sql语句执行顺序

sql语句定义的顺序

(1) SELECT (2)DISTINCT<select_list>
(3) FROM <left_table>
(4) <join_type> JOIN <right_table>
(5)         ON <join_condition>
(6) WHERE <where_condition>
(7) GROUP BY <group_by_list>
(8) WITH {CUBE|ROLLUP}
(9) HAVING <having_condition>
(10) ORDER BY <order_by_condition>
(11) LIMIT <limit_number>

sql语句执行顺序

(8) SELECT (9)DISTINCT<select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2)         ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE|ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
(11) LIMIT <limit_number>

可以看到,一共有十一个步骤,最先执行的是FROM操作,最后执行的是LIMIT操作。每个操作都会产生一个虚拟表,该虚拟表作为一个处理的输入,看下执行顺序:

  1. FROM:对FROM子句中的左表<left_table>和右表<right_table>执行笛卡儿积,产生虚拟表VT1;
  2. ON: 对虚拟表VT1进行ON筛选,只有那些符合<join_condition>的行才被插入虚拟表VT2;
  3. JOIN: 如果指定了OUTER JOIN(如LEFT OUTER JOIN、RIGHT OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表VT2,产生虚拟表VT3。如果FROM子句包含两个以上的表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1~步骤3,直到处理完所有的表;
  4. WHERE: 对虚拟表VT3应用WHERE过滤条件,只有符合<where_condition>的记录才会被插入虚拟表VT4;
  5. GROUP By: 根据GROUP BY子句中的列,对VT4中的记录进行分组操作,产生VT5;
  6. WITH : 对VT5进行CUBE或ROLLUP操作,产生表VT6;
  7. HAVING: 对虚拟表VT6应用HAVING过滤器,只有符合<having_condition>的记录才会被插入到VT7;
  8. SELECT: 第二次执行SELECT操作,选择指定的列,插入到虚拟表VT8中;
  9. DISTINCT: 去除重复,产生虚拟表VT9;
  10. ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10;
  11. LIMIT: 取出指定街行的记录,产生虚拟表VT11,并返回给查询用户
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值