前言:平常写项目都是用的一些框架 例如: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="http://1.top">.top
top用来规定返回的记录的数目
select top 1 * from Student 返回Student表的第一条数据
select top 50 percent * from Student 返回Student表50%的数据
href="http://2.like">2.like
like用来指定模式匹配
select * from Student where name like '张%' 返回Student表里名字以张开头的数据
这里介绍一下通配符
% 代表一个或者多个字符
_ 代表一个字符
[abc] abc中任一字符(这里类似java的regex)
[^abc] 或者 [!abc] 不在abc中的任意字符(1个)
href="http://3.in">http://3.in
允许在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="http://8.select">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
以上皆借鉴