标签:
谈一下sql语法
sql为Structured Query Language的缩写,意思为结构化查询语言,具有定义、查询、更新和控制等多种功能,是关系数据库的基本语言。
sql主要分为4大类:
数据操纵语言 DML:insert update delete
数据查询语言 DQL:select
数据定义语言 DDL:create alter drop rename truncate
数据控制语言 DCL:grant revoke
1.数据定义语言 DDL
创建表 create table user(id varchar(10),name varchar(10),sex number(1) not null,age number(3),constraint pk_user primary key(id));
创建主键和约束条件为唯一性的时候 数据库会自动为该字段创建索引
用子查询创建表 create table user as select * from person;(表结构必须一致)
2.数据操纵语言 DML
插入语句 insert into user values(1,‘lufei‘,1,16);这种插入语句values中必须要包含表中的所有字段,
如果对固定的几个字段进行添加,要用 insert into user(id,name,sex) values(2,‘namei‘,0)
通过子查询进行插入 insert into user select * from person;(表结构必须一致)
更新语句 update user set age=18 where id=1;
删除语句 delete from user where id=2;
delete与truncate都为删除,他们有什么区别呢?
区别有一篇博客写的很好,可以作为参考
引自:http://www.cnblogs.com/luowende2012/archive/2012/07/22/2604049.html
3.数据查询语言 DQL
首先看一下查询语句的基本框架
select sex,max(age) from user where id=2 group by sex having sex=1 order by age;
需要查询的字段 表名 筛选条件 分组字段 分组筛选 排序字段
执行循序
1.where
2.group by
3.having
4.select
5.order by
下面写了一些sql语句 并对一些sql做出解释
1)查询当前时间
select NOW() from DUAL;
dual为数据库自带的一个虚表,可以通过这个表查询一些数据,或者进行一些操作
2)通过as关键字(可以省略)对字段或者表取别名
select id,name as username from user as u;
3)在user表中查询age大于16且name为空的人的id
select id from user u where age>16 and name is null;
4)查询年龄大于16小于18的人
select * from user where age>16 and age<18;
等价于 select * from user where age between 16 and 18;
5)查询年龄为16,17,18的海贼成员,且为女生(sex=0)
select * from user where age in (16,17,18) and sex=0;
等价于 select * from where (age=16 or age=17 or age=18) and sex=0; 还是用函数方便吧
6)查询name以lu开头(不区分大小写)的海贼成员
select * from user where substr(lower(name),1,2) like ‘lu‘;
查询name以ei结尾的海贼成员
select * from user where substr(lower(name),length(name)-1,2) like ‘ei‘;
7)查询年龄在平均年龄以上的海贼成员
首先第一步 你要知道平均年龄是多少
select avg(age) from user;
第二步查询年龄在平均年龄以上
select * from user u where u.age>(select avg(age) from user);
此语句为通过子查询 来查询结果的方式,子查询效率很低,如果有其他方式,尽量不要用子查询
8)查询男同胞里的平均年龄
select avg(age) from user where sex=1;
9)求每个年龄中的海贼成员人数
select count(*) from user group by age;
10)求每个性别中的海贼成员中平均年龄大于10的人的个数,性别,平均年龄
1.首先对每个性别进行分组
select sex from user group by sex;
2.求每个性别中平均年龄大于10的人的人数,性别,平均年龄
select count(*),sex,avg(age) from user group by sex having avg(age)>10
11)求每个性别中年龄都大于16的人的性别
select sex from user group by sex having min(age)>16;
换一种方式:
1.先求出年龄含有小于16的人
select distinct sex from user where age<16;
2.除了小于16的人都是大于16的人
select sex from user group by sex having sex not in(select distinct sex from user where age<16);
12)删除每个名字中重复的数据
思考:要删除重复的数据,不能全部删除,要保留一个,例如只保留id最大的数据
1.先求出每个年龄中id最大的数据,对于重复的数据,最大的id只有一个,而对于不重复的数据最大的一条就是他本身
所以只需求出最大的数据不用对重复的数据进行限制
select max(id) from user group by name;
3.删除重复的数据
delete from user where id not in(select max(id) from user group by name)
标签:
原文地址:http://www.cnblogs.com/qingtianyu/p/4651738.html