常用sql
改表名 rename table 旧表名 to 新表名
表头 create table 表名(字段名 类型 约束,..)
增列 alter table 表名 add 列名 类型 约束;
改列 alter table 表名 change 旧列名 新列名 类型 约束
删列 alter table 表名 drop 列名
插行 insert into 表名 values(值1,值2......)
改行 update star set age=22 where id=2
删行 delete from 表名 where 列名=值
查库 show databases;
查字符集 show create database db;
进库 use lb 查有多少张表:show tables;
查建表语句:show create table 表名
查看表结构 desc 表名;
但所有行:select*from from1;
查1行:SELECT*FROM star WHERE id=3 WHERE price>3000 HAVING TYPE=1
多行:select*from form1 where id in(1,3,5,7,15,20) HAVING price>3000
模糊 select*from from1 where name like %波_;
区间 select*from from1 where price between 2000 and 6000; [bɪˈtwin]
降序 select * from from1 order by price asc升/desc降;
去重并年龄升序SELECT DISTINCT price FROM star ORDER BY 年龄 ASC;
逻辑和 select * from from1 where price>3000 and age>30;
select*from user where username='张三' and password='123456'
逻辑或 select * from from1 where price>5000 or name like "周%";
逻辑非 select * from from1 where not(name like "周%");
查1列/多个列:SELECT 姓名 FROM star;
并筛选:SELECT id,年龄 FROM star WHERE 年龄>30;
聚合算条目数不能有where: select count(*) from from1
聚合算总和值 select sum(price) from from1
聚合最大值 select max(age) from star;
聚合最小值 select min(age) from from1;
分组聚合算平均值 SELECT TYPE, AVG(price)FROM star GROUP BY TYPE;
分组:整个表分组并把年龄*2的结果 单独列出 SELECT*,年龄*2 FROM star
以年龄分组 并把年龄大于30单独统计 SELECT 姓名,年龄>30 FROM star
以分组形式把姓名列出:SELECT TYPE,GROUP_CONCAT(姓名)FROM star GROUP BY TYPE
各个分组身份的平均值 select type,avg(price) from star group by type;
各个分组身份的最大的 select type,min(price) from star group by type;
各个分组身份的条目数 select type,count(*) from star group by type;
各个分组身份的条目数 并大于2的显示条目
select type,count(*)from star group by type having count(*)>2;
每组 条目里年龄大于30的显示条目;WHERE只能在分组前
SELECT TYPE,COUNT(*)FROM star WHERE 年龄>30 GROUP BY TYPE
每组 条目里年龄大于30的 并且条目大于2的 显示条目;HAVING可以分组后再过滤
SELECT TYPE,COUNT(*)FROM star WHERE 年龄>30 GROUP BY TYPE HAVING COUNT(*)>2
多表
MySQL多表 商品表的外键和分类表的主键
添加一个外键:alter table 表名 add foreign key(外键字段的字段名) references 主键表名 (主键字段名) ['ɔ:ltə] [ˈfɒrən][ˈrefrənsiz] [ˈkætəgɔri]
alter table star add foreign key(type)references category(cid)
删除一个外键:alter table 表名 drop foreign key 约束名
ALTER TABLE star DROP FOREIGN KEY star_ibfk_1
- 一对多(重点)
- 应用场景:学生和班级、商品和分类、用户和订单
- 建表原则:在多的一方添加一个外键,指向一的一方的主键
- 多对多(重点)
- 应用场景:商品和订单、学生和选课
- 建表原则:创建一张第三方表,该表除了id字段之外,还至少得有两字段,分别作为外键指向两张表的主键
- 一对第一
- 应用场景:人和身份证号
- 建表原则:先当成一对多来处理,再给多的一方的外键字段添加一个唯一约束
交叉查询得到的结果是一个笛卡尔积,这个结果中包含错误数据。
select*from star,category
连接查询:为了筛选交叉查询中获取带的正确数据(重点)
其实就是在交叉查询的基础上添加一个条件进行筛选正确数据
满足条件则显示,不满足则不显示 两种结果一样
隐式内连接查询 查询结果是a的外键star.type=b的主键(cid)/两个int相同就显示 b的主键对应的数据(cname) 简写的结果一模一样只是精简了代码
- select * from a表,b表where 条件(a表的外键=b表的主键)
SELECT*FROM star,category WHERE star.type=category.cid
SELECT*FROM star s,category c WHERE s.type=c.cid 可以用别名简化
显式 内连接查询 显示里面的,on只能用主外键关联作为条件,如果还有其它条件,后面加where
- select * from a表 inner join b表 on 条件
SELECT*FROM star s JOIN category c ON s.type=c.cid
SELECT*FROM star s JOIN category c ON s.type=c.cid 简化
外连接查询:显示主表 的所有数据,从表 的数据若满足条件则显示,不满足则以null显示
- 左外连接:以join左边的表为主表/star
select * from a表left outer join b表 on 条件
SELECT*FROM star s LEFT OUTER JOIN category c ON s.type=c.cid
- 右外连接:以join右边的表为主表 /category
- select * from a right outer join b on 条件
SELECT*FROM star s RIGHT OUTER JOIN category c ON s.type=c.cid
子查询(重点)
定义:一个select语句中嵌套另外一个完整的select语句,也就是说一个select语句作为另外一个select语句的条件
1--先查出最高身价明星 2再根据最高身价查出明星信息
SELECT MAX(price) FROM star
SELECT*FROM star WHERE price=5050
子查询就可以合并成一句查询 嵌套
SELECT*FROM star WHERE price=(SELECT MAX(price)FROM star)
--1查宝宝的身价2.以宝宝的身份去查询身价大于这个数的明星信息--
SELECT price FROM star WHERE NAME="宝宝"
SELECT*FROM star WHERE price>5000
SELECT*FROM star WHERE price>(SELECT price FROM star WHERE NAME="宝宝")
--1查出小白的类别2 根据这个类别查同类别明星信息--
SELECT TYPE FROM star WHERE NAME="小白"
SELECT*FROM star WHERE TYPE=2
SELECT*FROM star WHERE TYPE=(SELECT TYPE FROM star WHERE NAME="小白")
SELECT*FROM star WHERE TYPE=(SELECT TYPE FROM star WHERE NAME="小白")AND NAME!="罗永浩"//后面还可以加上不等于的语句
SELECT*FROM star WHERE TYPE=(SELECT cid FROM category WHERE cname="宝剑队"); //查所有类别为宝剑队的明星
联合查询(了解):合并两个select语句查询到的结果集
- union,去重
- union all,不去重
分页查询(重点)
- 关键字:limit a,b
- a代表从第几个下标开始查询
SELECT*FROM star LIMIT 0,4; //第二次 4,4
- b代表查询多少条数据,也就是每页显示的数据条数
- 将客户端传入的要查询的页数"page"转换成a
a=(page-1)*b
对明星进行按价格从高到低排序,然后取第一个明星信息
SELECT * FROM star ORDER BY price DESC LIMIT 0,1
SELECT ename,job FROM emp WHERE deptno=10 //10号部门员工和工作
SELECT deptno,AVG(sal)FROM emp GROUP BY deptno 以部门分组 查出平均工资
Oracle数据库 [ˈɒrəkl]
安装
安装全部下一步,检查先决条件时的网络配置需求,勾选用户已验证,最后一步更改两个用户名 把是否锁定帐户勾取消设置密码 密码 scott 密码tiger hr 密码hr
连接
http://pc5268-20140727:1158/em/ 用户名sys 密码root 连接身份sysdba 也可以用ip地址
instantclient_12_1目录下 dos执行 sqlplus scott/tiger@192.168.44.68:1521/orcl 第一次要输用户名和密码scott 密码tiger
用NavicatPremium要在工具->选项->环境->OCI环境,填instantclient_11_2\oci.dll 下载的 软件和下载的版本要一致32/64位
sql基础常识
在Oracle的学习之中,重点使用的是SQL语句,而所有的SQL语句都要在scott用户下完成,这个用户下一共有四张表,可以使用:
SELECT * FROM tab;
表结构详解
1、 部门表:dept [dɪˈpɑ:tmənt]department
№ | 名称 | 类型 | 描述 |
---|---|---|---|
1 | DEPTNO | NUMBER(2) | 表示部门编号,由两位数字所组成 |
2 | DNAME | VARCHAR2(14) | 部门名称,最多由14个字符所组成 |
3 | LOC | VARCHAR2(13) | 部门所在的位置 |
2、 雇员表:emp [ɪmˈplɔɪi:] employee
№ | 名称 | 类型 | 描述 |
---|---|---|---|
1 | EMPNO | NUMBER(4) | 雇员的编号,由四位数字所组成 |
2 | ENAME | VARCHAR2(10) | 雇员的姓名,由10位字符所组成 |
3 | JOB | VARCHAR2(9) | 雇员的职位 包括管理 管理的管理 |
4 | MGR | NUMBER(4) | 上级的字段 雇员对应的领导编号,领导也是雇员 |
5 | HIREDATE |