Mysql&Oracle数据源总结
Mysql&Oracle
一、Mysql
1.关系型数据库:mysql
2.主要使用过得工具:navicat
3.连接方式:ssh,主机、端口号、公钥、私钥验证/直连
4.基本sql语句
1)创建表:create table s(name varchar(10))
2)删除表:drop table 表名
3)查询:select */a,b/distinct(a)/count(*)/count(a)from 表名 where +查询条件
4)where 查询条件:
- 逻辑运算符 and、or、not
例1:查询年龄小于20的女同学
select * from students where age<20 and sex='女'
例2:查询女学生或'1班'的学生
select * from students where sex='女' or class='1班'
例3:查询非天津的学生
select * from students where not home='天津'
- 模糊查询:like、%表示任意多个字符、_表示一个任意字符
例1:查询姓孙的学生:
select * from s where name like 孙%
例2:查询姓孙且名字为一个字的学生
select * from s where name like '孙_'
例3:查询叫乔的学生
select * from s where name like '%乔'
- 范围查询:
in 表示在一个非连续的范围内
例:查询home在北京、上海的人
select * from s where home in ('北京'、'上海')
between...and 查询是一个连续的范围
例:查询年龄在18到25的
select * from s where age between 18 and 25
- null 与 ''
is null not is null
select * from s where card is null
select * from s where card not is null
5)排序:asc 升序
desc 降序
例1:查询所有学生,按年龄从小到大排序
select * from s order by age
例2:查询所有学生信息,按年龄大到小排序,年龄相同时,按学号从小到大排序
select * from s order by age desc,sno
6)聚合函数(聚合函数不能在where条件中使用)
- count(*) 计算总行数
- max(列)求此列最大值
- min(列)求此列最小值
- sum(列)求此列和
- avg(列)求此列平均值
7) 分组
按照字段分组:表示此字段相同得数据会被放在一个组中
可以对分组后的数据做统计,聚合运算
select 列1,列2,聚合... from 表名 group by 列1,列2...
例1:查询各种性别的人数
select sex,count(*) from students group by sex
例2:查询各种年龄的人数
select age,count(*) from students group by age
8)获取部分行数据
select * from 表名 limit start,count
例1:查询前3行学生信息
select * from students limit 0,3
8)连接查询
等值连接查询:查询结果为两个表匹配到的数据
左连接查询:查询结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据用null填充
右连接查询:查询结果为两个表匹配到的数据加右表特有的数据,对于左表不存在的数据用null填充
二、Oracle
1.Oracle简介:Oracle数据库系统是目前世界上流行的关系数据库管理系统,拥有可移植性好、使用方便、功能强等优点,在各类大、中、小、微机环境中都适用。是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。
2.Oracle查询语法大部分与Mysql一致,但也有很多不同点,下面一一列举操作Oracle数据库的sql语句编写实例
1)基本查询:SELECT [DISTINCT] * | 列1[别名1],列2[别名2],…… FROM 表名称[表别名];
eg:select no 员工编号,sal*12 年薪 from A;
查询A表中员工编号且计算员工年薪,输出表格以别名显示
2)限定查询:逻辑连接符:and、or、not
eg1:要求查询出不是clerk,但是工资低于3000的雇员
SELECT * FROM emp
WHERE job<>’CLERK’ AND sal < 3000 ;
eg2:查询职位是clerk,或者工资低于1200的所有雇员
SELECT * FROM emp
WHERE job=’CLERK’ AND sal<1200;
eg3:查出工资低于2000的员工的信息
SELECT * FROM emp
WHERE NOT sal > 2000;
3)范围限定查询:BETWEEN…AND
SELECT * FROM emp
WHERE sal BETWEEN 1500 AND 3000;
4)空判断
SELECT * FROM emp
WHERE comm IS NOT NULL;
5)in、not in
eg1:SELECT * FROM emp
WHERE empno IN (7369,7566,7788,9999);
6) LIKE可以实现数据的模糊查询操作,如何要想使用LIKE则必须使用如下的两个符号:
“.”:匹配任意的一位符号;
“%”:匹配任意的符号(包含匹配0位,1位,多位);
eg1:查询所有员工姓名中一字母A开头的员工信息
SELECT * FROM emp
WHERE ename LIKE 'A%';
eg2:查询所有雇员姓名中第二个字母是A的所有雇员
第一位可以人任意,但是必须占一位字符,使用“_”;
后面的位随便,使用“%”。
SELECT * FROM emp
WHERE ename LIKE '_A%';
eg3:查询雇员姓名中任意位置上存在有字母A的雇员信息
SELECT * FROM emp
WHERE ename LIKE '%A%';
7)指定顺序查询:
ORDER BY 排序字段 [ASC|DESC],排序字段 [ASC|DESC],
升序:ASC,默认不写排序也是升序;
降序:DESC,由高到低进行排序。
8)Oracle多表连接与表的连接
内连接:只有满足条件才会显示数据
外连接:左连接、右连接
为了更好的观察到连接的区别,现在已经在dept表中提供了一个没有雇员的部门40,同时在emp表中增加一个没有部门的雇员。
INSERT INTO emp (empno,ename,deptno) VALUES(8989,'HELLO', null);
emp表目前如下:HELLO这个雇员没有部门
观察一:内连接实现效果
select a.empon,e.ename,d.deptno,d.dname from emp a inner join dept d on e.deptno=d.deptno
此时没有部门的雇员以及没有雇员的部门信息都没有出现,因为null的判断不满足。
观察二:使用左(外)连接,希望所有的雇员信息都显示出来,即便他没有部门。
select a.empon,e.ename,d.deptno,d.dname from from emp a left join dept d on e.deptno=d.deptno
此时出现了没有部门的雇员。也就是左表的数据全部显示了。
观察三:使用右(外)连接,将所有的部分信息都显示出来。
select a.empon,e.ename,d.deptno,d.dname from from emp a right join dept d on e.deptno=d.deptno
内连接指的就是所有满足关联条件的数据出现,不满足的不出现。外连接就是指定一张数据表中的数据全部都显示,但是没有对应的其他表数据,内容为null。