Mysql&Oracle数据源总结

                                                                    Mysql&Oracle

 

一、Mysql

1.关系型数据库:mysql

2.主要使用过得工具:navicat

3.连接方式:ssh,主机、端口号、公钥、私钥验证/直连

Mysql&Oracle数据源总结

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这个雇员没有部门

Mysql&Oracle数据源总结

观察一:内连接实现效果

 select a.empon,e.ename,d.deptno,d.dname from emp a inner join dept d on e.deptno=d.deptno

Mysql&Oracle数据源总结

此时没有部门的雇员以及没有雇员的部门信息都没有出现,因为null的判断不满足。

观察二:使用左(外)连接,希望所有的雇员信息都显示出来,即便他没有部门。

select a.empon,e.ename,d.deptno,d.dname from from emp a left join dept d on e.deptno=d.deptno

Mysql&Oracle数据源总结

此时出现了没有部门的雇员。也就是左表的数据全部显示了。

观察三:使用右(外)连接,将所有的部分信息都显示出来。

select a.empon,e.ename,d.deptno,d.dname from from emp a right join dept d on e.deptno=d.deptno

Mysql&Oracle数据源总结

内连接指的就是所有满足关联条件的数据出现,不满足的不出现。外连接就是指定一张数据表中的数据全部都显示,但是没有对应的其他表数据,内容为null。