转载来自:点击打开链接
1、显示所有数据库:showdatabases;
2、使用数据库:use 数据库名;
3、显示所有列表:show tables;
4、建表 create table 表名(列名 列类型, ……)
5、插入数据 insert into 表名 values(列值, ……)
6、删除表 droptable 表名;
7、查询 select * from 表名;
SQL> select * from user_xxx;——“*”表示查询全部列
SQL> select name,email fromuser_xxx; ——查询指定列
条件查询:
查找id=1001且passwd=1234考生的名字
select name,email fromuser
where id = 1001 and password = ‘1234’;
10、插入数据:如插入empno为1011,ename为liu,其他信息为null
insert into emp(empno,ename)values(1011,'liu');
11、null的使用注意:null与任何类型进行算术运算均为空值即(NULL):
selectename,salary,bonus,salary+ifnull(bonus,0) month_sal from emp;
IFNULL(a,b) :如果a为NULL,则用b替换a值。
如:查询ename,job,如果job为NULL,则显示‘no position’:
12、复制表:create table emp1 as select * from emp;
13、去重:distinct(注意必须跟着select后面)
(1)where:select ename,salary from emp where salary > 10000;
select ename,job from emp where job = 'analyst';
select ename,salary from emp where salarybetween 6000 and 10000;
相当于 select ename ,salary from emp where salary >= 6000 and salary <=10000;
select ename,job from emp where jobin('analyst','manager');
相当于 select ename, job from emp where job = 'analyst' or job ='manager';
(5)is null :判断null值的方法;is not null:判断不是null值的方法。
select ename,job from emp where job isnull;
(6) NOT
not in():不在()范围之内;notbetween ... and ... :不在...和...的范围内。
15、排序:
(1)从小到大:order by 或者 order by ... asc(asc可省去)
(2)从大到小(倒序)排列:order by ... desc:
按部门排列,同一部门按薪水高至低排列:
16、返回当前时间的函数:now():YYYY-mm-DD HH-MM-SS 形式
返回当前时间: curtime() : HH-MM-SS形式
(1)count()
emp中一共有多少条员工记录:
select count(*) from emp;
emp中job不是null的人数有多少:
select count(job) from emp;
(2)avg()
emp中员工的平均薪水:(注意:此处的avg(salary)只按有薪水的员工人数除)
select avg(salary) from emp;
(3)sum()
emp表中的员工的总薪水:
select sum(salary) from emp;
(4)max()、min()
计算员工的人数总和、薪水综合、平均薪水是多少:
select count(*) num,sum(salary)sum_sal,sum(salary)/count(*) avg_sal from emp;
组函数:count / avg / sum / max / min 如果函数中写列名,默认忽略空值
avg / sum 针对数字的操作 max / min 对所有数据类型都可以操作
18、分组查询:group by
按部门计算每个部门的最高和最低薪水分别是多少:
计算每个部门的薪水总和和平均薪水:
注意:select后出现的列,凡是没有被组函数包围的列,必须出现在group by 短语中
19、having 子句
用于对分组后的数据进行过滤。
注意区别where是对表中数据的过滤;having是对分组得到的结果数据进一步过滤
平均薪水大于5000元的部门数据,没有部门的不算
20、子查询
谁的薪水比拉克丝高:
子查询出现在having短语中
哪个部门的人数比部门30的人数多:
查询谁的薪水比所有叫拉克丝的薪水都高:
select ename,salary from emp where salary> ALL(select salary from emp where ename = 'Laucs');
22.关联子查询
哪些员工的薪水比本部门的平均薪水低
exists 判断子查询有没有数据返回,有则返回true,没有则返回false
exists 不关心查询的结果,所以子查询中select后面写什么都可以
通常,我们写常量“1”
哪些人是其他人的经理
24、表间关联查询
内连接
join关键字用于连接两个表,语法如下:
表1 join 表2 on 条件
列出员工的姓名和所在部门的名字和城市
SQL>select t1.ename,t2.ename fromemp_xxx t1
join emp_xxx t2 on t1.mgr = t2.empno;