基本的入门SQL语句总结

首先,先看看SQL语句都有哪些核心动词。

SQL动词
SQL功能动词
数据查询select
数据操作insert,update,delete
数据定义create,drop,alter
数据控制grant,revoke

SQL包括以下一系列操作:

  • 定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库。
  • 对数据库中的数据进行查询和更新。
  • 数据库重构和维护。
  • 数据库安全性、完整性控制、以及事务控制。
  • 嵌入式SQL和动态SQL定义。

接下来,这篇文章主要介绍下SQL里数据查询和操作的基本语句。

数据查询(select)一般格式为:

select [all|distinct] <目标列表达式>[,<目标列表达式>]...
from <表名或视图名> [,<表名或试图名>...]
[where <条件表达式>]
[group by <列名> [having <条件表达式>]]
[order by <列名> [asc|desc]];

/*
[]为可选可不选,|为或的意思。该代码大概含义是,
根据where的表达式从from的基本表或者试图里找出满足条件的数据(元组,行),
再按select里的目标列表达式选出元组中的属性值形成的结果(表)。
而group by语句是将结果(表)按对应的列名的值进行分组,若带有having则只是有满足条件的数据(元组,行)才输出。
order by是将结果(表)按对应的列名的值进行升序或降序排序。
*/

单表查询:

(1)查询指定列:

select 列名1,列名2,... from 表名或视图名;   /*各列的先后顺序可以和表中的顺序不一样*/

(2)查询全部列:将列名指定为*

select * from 表名或视图名;

(3)查询经过计算的值:select后面不仅可以是列名,也可以是表达式。

(4)可以通过别名的方式来改变查询结果的列表题:

select 原列标题 别名,...    /*原列标题+空格+别名*/
from 表名或视图名;

/*注:若遇到列标题原本自身带有空格时候,要用单引号把这整个列标题包起来*/

(5)去掉结果(表)中重复行,指定关键字distinct:

select distinct 列名    /* 默认是all,即保留结果(表)中取值重复的行*/
from 表名或视图名;

(6)查询满足条件的数据(元组,行):

常用的查询条件
查询条件谓词
比较=、>、<、>=、<=、!=、<>、!>、!<
确定范围between and、not between and
确定集合in、not in
字符匹配like、not like
空值is null、is not null
逻辑运算and、or、not

 

 

注:1.like查找和字符串匹配时,可以含有通配符 % 和 _ 。

       2.其中 % 是代表任意长度(可以为0)的字符串。例如:x%h表示以x开头,以h结尾的任意长度字符串。

       3.其中 _ 代表任意单个字符。例如:x_h表示以x开头,以h结尾的长度为3的任意字符串。

       4.若要查询的字符串本身含有 % 或者 _ 的,要使用 escape '<转码字符>' 语句来进行转义。例如(如下代码):

select sage     /*查询名字为hxh_chuanyi的年龄。escape'\'表示"\"为换码字符*/
from student 
where sname like 'hxh\_chuanyi' escape'\';

(7)关于空值查询。用 is null 或 is not null谓词,且 is 不能用 "=" 代替:

select 列名 from 表名或视图名 
where something is null;   /*某属性something是空值*/

(8)order by语句升序(asc,默认的)或者降序(desc)排列:

select *            /*查询结果按年龄sage降序排列*/
from 表名或视图名
order by sgae desc;

(9)聚集函数(只能用 select 语句和 group by 语句中的 having 语句):

count(*)统计元组个数(行数)
count(列名)统计一列中值的个数
sum(列名)计算一列值的总和(为数值型)
avg(列名)计算一列值的平均值(为数值型)
min(列名)求一列值中的最小值
max(列名)求一列值中的最大值

 

 

(10)group by 语句是对查询结果按某一列或多列的值分组,值相等的为一组(where语句中不能用聚集函数作为条件表达式的):

select sno from sc        /*学生选课表sc(sno,cno,score),查询选修三门以上课程的学生学号*/
group by sno
having count(*)>3;

连接查询(涉及两张表及以上):

(1)等值与非等值连接查询,一般格式为(在 where 语句中用来连接两个表的条件成为连接谓词):

select 表名.列名,表名.列名,...
from 表1,表2,...,表n
where 表名i.列名 比较运算符 表名j.列名;   /*当连接运算符为 = 时,称为等值连接,其他称为非等值连接*/

(2)自身连接(要对表进行取别名):

select 别名1.列名,别名2.列名,...
from 表名 别名,表名 别名
where 条件表达式;

嵌套查询(子查询不能使用 order by 语句,只能对最终查询结果排序):

select 目标列表达式,...
from 表名
where ...(select 目标列表达式 from 表名 where ...);    /*()内为子查询*/

(1)带有 any 或 all 谓词的子查询(涉及子查询返回多值时):

any、all 谓词与聚集函数、in 谓词的等价转换
 =<> 或 !=<<=>>=
anyin<max<=max>min>=min
allnot in<min<=min>max>=max

例如:

select sname,sage    /*查询女生中比任意一个男生年龄小的学生名字和年龄*/
from student
where sage<any(select sage
               from student
               where ssex='男')
      and ssex!='男';

数据操作(insert、update、delete):

(1)插入数据:

insert into <表名>[(<属性列1>[,<属性列2>])...] values(<常量1>[,<常量2>]...);
/*属性列的顺序可以和表的列顺序不同,但是values的值要与之一一对应,
常量若有字符串要用单引号括起来,若表名后面没有跟属性列则values的值就与原表的列顺序一致*/

(2)修改数据:

update <表名> set <列名>=<表达式>[,<列名>=<表达式>]...
[where <条件>];

(3)删除数据:

delete from <表名> [where <条件>];  /*若没有where条件,则是删除表中所有元组,而不是删除表*/

 

    以上是我学习两三天的SQL语句中的最基本增删改查操作,不是很全面存在有些不足,后续有需要会进行更新改进。也同时欢迎广大朋友若有发现错误可以指出,本人会虚心听取建议的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值