SQL的基础语法

前言:平常写项目都是用的一些框架 例如:Hibernate,Mybatis

今天被人问到基础sql语法时,却茫然了...

可能是平常用到的sql语句太过于简单了吧。

在这里把sql语句做一个全面的梳理.

 

基础阶段

1.select

select 列名 from 表名

select * from Student 显示Student所有信息

2.distinct

select distinct 列名 from 表名 显示表中唯一的列名(去除重复)

3.where

select * from Student where name='张三' 条件选择

where里还能添加 between 、=、!=、>、<、like 、and、or等

select * from Student where age>20

4.and和or 把两个或者多个条件连接起来

select * from Student where name='张三' and age=20

select * from Student where name='张三' or age=20

5.order by

用来排序的,可以根据字母排序也可根据数字排序,有升序和降序两种 默认为升序,降序加上DESC

select * from Student order by age

6.insert into

插入语句。

insert into student(name,age) values ('李四',21)

7.update

update用于更新数据

update Student set age=22 where name='张三'

8.delete

删除表中的行

delete from Student where name='李四'

9.创建数据库

create database Student

10.创建数据库中的表

create table table_name

(

id int,

name varchar(255),

age int

)

11.约束

创建表的时候还应该对表添加一些约束,例如:主键,是否为空之类的

create table Student

(

id int not null auto-creament,

name varchar(255) not null,

age int ,

primary key(id)

)

12.删除数据库或表

droptable Student

drop database Student

清空表中的数据

truncate table Student

没有删除表,只是清空了数据而已

Alter table Student

add birth date

Alter 是用来改变表或数据库的关键字

 

进阶阶段

1a href="">.top

top用来规定返回的记录的数目

select top 1 * from Student 返回Student表的第一条数据

select top 50 percent * from Student 返回Student表50%的数据

href="">2.like

like用来指定模式匹配

select * from Student where name like '张%' 返回Student表里名字以张开头的数据

这里介绍一下通配符

% 代表一个或者多个字符

_ 代表一个字符

[abc] abc中任一字符(这里类似java的regex)

[^abc] 或者 [!abc] 不在abc中的任意字符(1个)

href="">

允许在where里规定多个值

select * from Student where name in ('张三','李四')

4.between...and

操作符选取了一个范围

select * from Student where age between 15 and 30 选取15到30之前包含15的(mysql)

不同数据库对这个包含的含义不同

5.Alias

用于表的别名

select name as n , age as a from Student

6.join...on

连接2个或者多个表

连接两个表需要注意,其中一个表中必须有另外一个表的主键,根据这个主键来连接。

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P

ORDER BY Persons.LastName

inner join = join 选取两张表中共同的部分

left join 选择左边表中所有部分

right join 选择右边表中所有部分

full join 选择两张表中所有部分

7.Union

合并两张表

前提:两张表有相同数量的列,列的数据类型也必须相似

href="">8.select into

从一个表里选择数据插入到另外一个表里

select * into Student_backup from Student

升华阶段

1.索引

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

可以在表中创建索引,以便更加快速高效地查询数据。

用户无法看到索引,它们只能被用来加速搜索/查询。

注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

CREATE INDEX PersonIndex ON Person (LastName DESC)

2.视图

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。

可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。通过向视图添加函数、join 等等,我们可以向用户精确地提交我们希望提交的数据。

CREATE VIEW [Current Product List] AS

SELECT ProductID,ProductName

FROM Products

WHERE Discontinued=No

SELECT * FROM [Products Above Average Price]

3.函数

SELECT AVG(column_name) FROM table_name 返回该列的平均数

SELECT COUNT(column_name) FROM table_name 返回指定列的数目

SELECT FIRST(column_name) FROM table_name 返回指定的字段中第一个记录的值

SELECT LAST(column_name) FROM table_name 返回指定的字段中最后一个记录的值

SELECT MAX(column_name) FROM table_name 返回一列中的最大值。NULL 值不包括在计算中

SELECT MIN(column_name) FROM table_name 返回一列中的最小值。NULL 值不包括在计算中

SELECT SUM(column_name) FROM table_name 返回数值列的总数(总额)

4.group by

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组

SELECT Customer,SUM(OrderPrice)

FROM Orders
GROUP BY Customer

select 语句中含有合计函数,必须进行分组。

5.having

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500

以上皆借鉴

原文链接:https://zhuanlan.zhihu.com/p/35917494

猜你喜欢

转载自www.cnblogs.com/guantou1992/p/12817122.html