2017/3/7 18:06
Mysql基础操作: 最难的是优化,提高数据库的效率.索引,分表.
增删改查,
高级:如何搭建真实的环境,服务器集群,负载均衡.
数据库的基础:
1 什么是数据库: database,存储数据的仓库.
数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存--Ram)
2 数据库的分类?
存储介质的不同进行分类 :关系型数据库(SQL)和非关系型数据库(NoSQL:Not Only SQL)
3 不同是数据库阵营中的产品有哪些?
关系型数据库:
大型:Oracle,DB2
中型:SQl-SERVER,Mysql等
小型:access 等
非关系型:redis(同步到磁盘)
4 两种数据库阵营的区别?
关系型数据库:安全(保存磁盘基本不可能丢失),容易理解.比较浪费空间,二维表存储.
非关系数据库:效率高,不安全(断电丢失)
关系型数据库
1 什么是关系型数据库
关系型数据库:是一种建立在关系模型(数学模型)上的数据库.--数学还是重要的
关系模型:一种所为的建立在关系上的模型.关系模型包含三个方面
数据结构:数据存储的问题,二维表(有行和列).
操作指令集合:所有的 SQL语句
完整性约束:表内数据约束(字段与字段),表与表之间约束(外键),
2 关系型数据库的设计?
关系型数据库:从需要存储的数据需求中分析,如果是一类数据(实体)应该设计成一张二维表:表是由表头(字段名:用来规定数据的名字)和数据部分组成(实际存储的数据单元)
二维表:行和列
表头 |
字段名1 |
字段名2 |
数据单元 |
数据1 |
数据2 |
以实际案例来进行分析处理:分析一个教学系统,讲师负责教学,教学生,在教室教学生.
1)找出系统中所存在的实体:讲师表,学生表,班级班.
2)找出实体中应该存在的数据信息
讲师:姓名,性别,年龄,工资
学生:姓名,性别,学号,学科
班级:班级名字,教室编号.
关系型数据库:维护实体内部,实体与实体之间的联系.
实体内部联系:每个学生都有姓名,性别,学号,学科信息
姓名 |
性别 |
学号 |
学科 |
年龄 |
|
Sakura |
男 |
007 |
江南 |
18 |
|
柏喜 |
男 |
007 |
梅花 |
26 |
|
sql |
|
222 |
远 |
|
|
第二行的所有字段,都是在描述这个学生的(内部联系);第二列只能放性别(内部约束)
关系数据库特点之一:如果表中对应的某个字段没有值(数据),但是也要分配空间:关系数据库浪费空间
实体与实体之间的联系:每个学生肯定属于某个班级(多对一),每个班级一定有多个学生(一对多)
姓名 |
性别 |
学号 |
学科 |
年龄 |
班级 |
Sakura |
男 |
007 |
江南 |
18 |
双牌二中227 |
柏喜 |
男 |
007 |
梅花 |
26 |
双牌二小 |
sql |
|
222 |
远 |
|
|
班级名称 |
教室编号 |
双牌二中227 |
227 |
双牌二小 |
007 |
学生实体与班级实体的关联关系:实体与实体之间的关系
关键字说明
数据库:database
数据库系统:DBS(database system):是一种虚拟系统,将多种内容关联起来的称呼.
DBS= DBMS +DB
DBMS:=Database Management System 数据库管理系统,专门管理数据库
DBA:Database Administrator,数据库管理员
行/记录:row/record ,本质是一个东西:都是指表中的一行(一条记录)行是从结构角度出发,记录是从数据角度出发
列/字段:column/field
SQL
SQL:Structure Query Language,结构化查询语言(数据以查询为主:99%是在进行查询操作)
SQL 分为是哪个部分
DDL:data definition language,数据定义语言,用来维护存储数据的结构(数据库,表) 代表指令:create,drop(删除),alter(更改)等
DML:datamanipulation language ,数据操作语言,用来对数据进行操作(数据表中的内容),代表指令:insert,delete,updata等:其中DML内部又单独进行了一个分类:DQL(Data Query Language:数据查询语言)如select
DCL:Data Control Language,数据控制语言,主要负责权限管理(用户),代表指令:grant,revoke等
SQL是关系型数据的操作指令,SQL是一种约束,但不强制(W3C):不同的数据产品(如Oracle,Mysql)可能内部会有一些细微的区别.
Mysql数据库
mysql数据库是一种c/s结构的软件:客户端/服务端,若想访问服务器,必须通过客户端,服务器一直运行,客户端需要使用的时候运行.---飞秋(扁平化的c/s结构)
交互方式:
1 客户端连接认证:连接服务器,认证身份:mysql.exe-hPup
2 发送SQL指令
3 服务器接受SQL指令:处理SQL指令:返回操作结果
4 客户端接受结果;显示结果
5 断开连接(释放资源:服务器并发限制):exit/quit/\q
Mysql服务器对象
没有办法完全了解服务器内部的内容:只能粗略的了解数据库服务器内部的内容
将mysql服务器对象分了四层:系统(DBMS)>数据库(DB)>表(Table)>字段(field)>数据
SQL基本操作
基本操作:CRUD
分为三类:库操作,表操作,数据操作.
库操作:
对数据库的增删改查
新增数据库:
基本语法
Create database 数据库名字(库选项);
库选项:用来约束数据库,分为两个选项,一个叫字符集设定:charset/character set ,数据存储的编码格式.常用字符集GBK和UTF8
校对集设定:collate 具体校对集(数据比较的规则)
--双中华线注释(单行注释),也可以用#号
--创建数据库
create database mydatabase charset utf8;
数据库名字不能用关键字和保留字.
SQL语句报错:只会告诉用户报错的大概位置,不会说明报错原因(静默模式.)
如果非要使用关键字或者保留字,那么必须使用反引号(尽量不使用呗.有什么犹豫的)
中文数据库是可以的,但是有前提条件,服务器能够识别(不用)
Create
当创建数据库的SQL语句执行之后,发生了什么.
1 会在数据库系统中增加了对应的数据库信息.
2 每个数据库下都有个OPT文件,保存了库选项
查看数据库
1 查看所有数据库:show Database;
2 查看指定部分的数据库:模糊查询
show Database like 'pattern' --pattern是匹配模式
%:表示匹配多个模糊匹配 这个模糊查询应该是有用的
_:单个匹配,准确匹配
3 查看数据库的创建语句: show create database 数据库名字;
更新数据库:
数据库名字不可修改.
数据库的修改仅限于库选项:字符集和校对集.
alter Database 数据库名字 [库选项];
charset/character set [=] 字符集
删除数据库
所有的操作中:删除是最简单.
drop database 数据库名字;
级联删除,删除数据库.里面所有的表也全都被删除.注意:数据库的删除不是随便的.不能随意删除.先备份后操作. 数据一定要备份的想法
表操作
表与字段是密不可分的,
create table [if not exist] 表名(字段名字:数据类型,字段名字:数据类型 --);
表选项:控制表的表现
字符集:charset/character set 具体字符集 --保证表中数据存储的字符集
校对集:collate 具体校对集;
表的设计都必须制定数据库, 数据类型 varchar 可变的字符串.
1 指定数据库下已经存在对应的表
2 数据库对应的文件夹下,会产生对应的文件.
查看数据表
1所有的表,show tables;
2 查看部分表:模糊匹配:show table %
3 查看表的创建语句 :show creat tabele
实际联系操作:
SQL 对大小写不敏感.
DML 语句
SELECT - 从数据库表中获取数据 select 列名称 form 表名称 ; select* from 表名称 *--是选取所有列的方式
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
--------------------------------
DDL 语句
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
distinct(明显的,独特的) 返回所有的唯一值. select distinct 列名称 from 表名称
where 在这里进行操作(有条件的从表中选数据) select 列名称 from 表名称 where 列 运算符值 select*from z_zzjgmb where zyc = '第一事业部'--(从列表中选取第一事业部的行)
SQL 使用单引号来环绕 文本值,如果是数值不用'' 红色是错误的
这是正确的:
SELECT * FROM Persons WHERE FirstName='Bush'
FirstName= Bush
这是正确的:
SELECT * FROM Persons WHERE Year>1965 Yeat >'1965'
Z_Sakura
name |
race |
function |
level |
Sakura柏 |
龙族 |
无敌 |
终极 |
柏喜 |
人族 |
勇敢 |
中级 |
And 和 or 运算符.就这样咯 一个与和或的关系. select * form z_Sakura where book='龙族' and name = '柏喜' 感觉这个和写EXCEL公式差不多,它们可以组合起来写很复杂的逻辑公式.
order by 条件(排序用的) select name form z_Sakura order by name -- (以名字字母排序如果name后面 加desc 就是倒序)
insert into 表名称 values (值1,值2.)
insert into z_Sakura values ('孤单的人','人族','孤独','未知')
name |
race |
function |
level |
Sakura柏 |
龙族 |
无敌 |
终极 |
柏喜 |
人族 |
勇敢 |
中级 |
孤单的人 |
人族 |
孤独 |
未知 |
insert into z_Sakura (name,function) values (医生,小时候的梦)
name |
race |
function |
level |
Sakura柏 |
龙族 |
无敌 |
终极 |
柏喜 |
人族 |
勇敢 |
中级 |
孤单的人 |
人族 |
孤独 |
未知 |
医生 |
|
小时候的梦 |
|
updata 修改表中的数据 updata 表名称 set 列名称 = 新值 where 列名称 = 某值;
updata Z_Sakura set race = '人族',level = '中级' where name ='医生'
name |
race |
function |
level |
Sakura柏 |
龙族 |
无敌 |
终极 |
柏喜 |
人族 |
勇敢 |
中级 |
孤单的人 |
人族 |
孤独 |
未知 |
医生 |
人族 |
小时候的梦 |
中级 |
delete 删除表中行 delete (这个单词打的很熟) ,delete form 表名称 where 列名称 = 值;
删除某行 , delete from z_Sakura where level = '未知' ; 这样孤单的人就没有了.
删除所有 , delete from table_name 或者 delete *form table_name , 这样增删改查就学完了.这是最基本的东西.下班.回去抽烟---(抽你个锤子的烟).(笑了,现在长豆了,自信降低)(和长痘没关系.)
自我总结:1. 所有的 from 后面都是跟着表名,select,delete,updata,
2. where相当于IF很有用,后面跟着一系列的运算符--虽然通俗易懂,但是要经常使用.工具就是要使用
3 and和or,与和或.可以用在where里面.
4 distinct,返回唯一值,把相同的全部剔除.order by 排序 正序排,加个desc就是倒序排. (去除重复项)
SQL 高级语法
我一直把FROM打错了.
TOP 选择前几项,大型表使用吧.
语法:select top number|percent columns_name from table_name
实例:select top 2 *from Sakura (选择前两条数据)
Like 有条件筛选数据
语法:select columns_name from table_name where columns_name like pattern %可以定义通配符,模糊查找
实例:select * from sakura where race like '龙%' 查看表种族里所有以龙开头的行
In 可以允许我们在where 句子中规定多个值.
select *from Sakura where '等级' in ('未知','终极')
Between 在什么之间
语法:select column_names from table_name where column_name between value1 and value2; 在这两者之间,,要是之外就写.NOT between value1 and value2;
Aliases 表的别名或者给列重命名
表的语法: select column_names from table_name As alias_name; ---(更方便阅读和调用)
列的语法:select column_name AS alias_name from table_name;
2017/3/14 15:23
truncate table table_name 删除表.
join 表的关联用于多个表列之间的关系,从这些表中查询数据.
数据库中表可以通过键彼此联系起来,主键(primary key)是一个列,列中的每一行的值都是唯一的.把不同的表关联起来.(当你完美运用了select,就可以通过join几张表的数据组成一张表.)
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
明白了就是返回表一的所有 选择字段,它们有一个主键关联起来,选择表二 需要的字段.
select column_name(s) from table_name1 left join table_name2 on table_name1.column_name= table_name2.column_name
多用下就好的.
2017/3/16 10:31
left join 返回所有的左表
right join 返回所有的右表
full join 左右所有的表,就完全拼接.
select column_name(s) from table_name1 right join table_name2 on table_name1.column_name = table_name2.column_name
union (union all 把所有的字段都加载一列里.) --- 这个还是有点不太明白的.
相同的列和数据类型.把两张表的某个字段进行汇总.
select column_name(s) from table_name1
union
select column_name(s) from table_name2
select into 从一个表中选择数据插入另一表中 (常用来创建表的备份)
select * into new_table_name [in externaldatabase]
from old_table_name --- 这是所有的列,可以把*换成想要的列;
创建表时有下面几种约束: 后面都是在 创建表时使用
not null 约束强制列不接受空值 in_p int not null,
unique 约束唯一标识数据库表中的每条记录
创建表时create
unique(Id_p) 单一的 ,多个列形成key唯一值时
constraint uc_personId unique (id_p,lastname).
更改表时
alter table persons
add unique(id_p)
add constraint uc_personid unique (id_p,lastName).
如果是撤销就用drop替换add
primary key 约束唯一标识数据库表中的每条记录.
主键必须包含唯一值,不能有null值.每个表都应该有一个主键,并且每个表只能有一个主键. 语法和unique差不多,把关键字换一下.
foreign key table_1的主键id_1(primary key) 就是table_2外键 id_1(foreign key) --两个表中都有这一列. 这个几把少用吧.不记了.
check 用于限制列中的值范围 check(id_p>0)
default
这上面用法都差不多明白他们自己的意思就好.
1 sql和mysql创建表时有点不一样,它们都可以多重约束 constraint
2 都可以alter 修改表时,add
3 都可以alter 修改表时,dorp 把约束去掉.
这些表是约束,我也没用到过.看来有什么机会试用下.最重要的还是join 把表关联起来on后面跟primary key两个表相同的主键. as 简称使用
2017/3/17 11:08
sql create index 创建索引,更快更高效的查询数据,
语法:create index personIndx on person (lastname) 解释:给person表中的lastname加个索引.
如果你想倒序排列(lastname desc) 、索引多个字段--field时 (lastname,fisrtname)
删除--drop
sql drop index 删除索引 :
drop index index_name--oracle ;
alter table table_name drop index index_name --mysql;
删除数据库: drop database 数据库名称
删除表时: drop table 表名称
只删除表中的数据时: truncate table 表名称
修改--alter 留心报错信息,语法错误就是语法错误.
sql alter table 修改表
alter table table_name add column_name datatype ; 增加一个字段
alter table table_name drop column column_name 删除一个字段 (有些数据库不支持)
alter table table_name alter column column_name datatype 修改数据类型--oracal;
alter table class modify column grand year 修改数据类型 --mysql 气的我.
sql auto increment
会在表插入新记录时生成唯一的一个数字,经常用来自动创建主键字段的值
mysql的用法
auto_increment 默认值从一开始,每条递增一.想从其他值开始
alter table persons auto_increment = 100;
sql server用identity P_id int primary key identity, --就一行
SQL 函数用法
函数还是很重要的一个部分,基本函数类型有若干种.函数的基本类型是:
Aggregate 函数 -- 合计函数
Scalar 函数 -- 计算函数
语法: select function (列) from 表
Aggregate 基本函数.
你对SQL的应用还差的远呢.真是够小白的. 用函数取值,然后作为where 的一个判断条件
SELECT AVG(column_name) From table_name 选取列的平均值
SELECT COUNT (column_name) from table_name 选取指定列的值
select count (distinct column_name) from table_name 选取指定列的不同值
select first(column_name) From table_name 字段中的第一个值
select last(column_name) From table_name 字段中最后一个值
select max(column_name) From table_name 字段中最大的一个值
select min(column_name) From table_name 字段中最小的一个值
select sum(column_name) From table_name 数值列的总数
select ucase(column_name) From table_name 字段的值转换为大写
select lcase(column_name) From table_name 字段的值转换为小写
select mid(column_name,start[,length]) From table_name 提取的字段.
select len(column_name) From table_name 返回字段中值的长度
select round(column_name,decimals) From table_name 四舍五入,返回数值的位数
select now() From table_name 提取当前的时间.
select format(column_name,format) From table_name 规定字段的格式.
having 增加是因为where 无法与合计函数一起使用 ,必须在 group by 函数后面 ,进行条件筛选
select customer,sum(orderprice) From order
Group by customer
having sum(orderprice)<2000 找出客户订单金额小于两千的,并以客户字段排列.
WHERE 不能一起使用,是不能对聚合函数和select 的字段使用,可以 限制别的字段
Group by 常用于合计函数
select 后面的字段要么就在Group by 后面作为分类的依据,要么就包含在聚合函数里.\
case 语法 :
case 条件 then 结果 case name= '柏喜' then '男'
case when 条件 then X1 else X2 这样明白了吧.靠自己.只要认真用心,什么都是可以做到的.
COALESCE ( expression,value1,value2 …… ,valuen) 判断是否为空值,然后显示value1
对内存操作是编程语言的强项,但是对硬盘操作是数据库的强项
数据库如何存储的,如何操作,如何显示.
完全没有我这个好用,方便实在
主键是唯一的标志,区分事物与事物之间的区别 ,外键连接两个表的字段.A与B 表的连接.将A_主键放在B中,就可以了.这样B中的A_主键就是B_外键.
这个图还是可以的.很有直观性和实用性.
测验效果看起来还不错. 记住了.都是where后面接条件.不要放在前面去.select * from baixi where 'x'='y' and 'b'='d' 若是把条件where后面的条件放在前面就是错的.
SQL 是指 structure query language 结构查询化语言.
您的回答:
1.SQL 指的是?
您的回答:Structured Query Language
2.哪个 SQL 语句用于从数据库中提取数据?
您的回答:SELECT
3.哪条 SQL 语句用于更新数据库中的数据?
您的回答:UPDATE
4.哪条 SQL 语句用于删除数据库中的数据?
您的回答:DELETE
5.哪条 SQL 语句用于在数据库中插入新的数据?
您的回答:INSERT INTO
6.通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列?
您的回答:SELECT FirstName FROM Persons
7.通过 SQL,您如何从 "Persons" 表中选取所有的列?
您的回答:SELECT * FROM Persons
8.通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值等于"Peter" 的所有记录?
您的回答:SELECT * FROM Persons WHERE FirstName='Peter'
9.通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值以 "a" 开头的所有记录?
您的回答:SELECT * FROM Persons WHERE FirstName LIKE 'a%'
10.请判断下列说法是否正确:当所列出的某个条件为 true 时,OR 运算符会显示记录。当列出的所有条件为 true 时,AND 运算符会显示记录。
您的回答:正确
11.通过 SQL,您如何在表 Persons 中选择 FirstName 等于 Thomas 而 LastName 等于 Carter 的所有记录?
您的回答:SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
12.通过 SQL,您如何按字母顺序选取 Persons 表中 LastName 介于 Adams 和 Carter 的所有记录?
您的回答:SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
13.哪条 SQL 语句可返回唯一不同的值?
您的回答:SELECT DISTINCT
14.哪个 SQL 关键词用于对结果集进行排序?
您的回答:ORDER BY
15.通过 SQL,您如何根据 "FirstName" 列降序地从 "Persons" 表返回所有记录?
您的回答:SELECT * FROM Persons ORDER BY FirstName DESC
16.通过 SQL,您如何向 "Persons" 表插入新的记录?
您的回答:INSERT INTO Persons VALUES ('Jimmy', 'Jackson')
17.通过 SQL,您如何向 "Persons" 表中的 "LastName" 列插入 "Wilson" ?
您的回答:INSERT INTO Persons (LastName) VALUES ('Wilson')
18.您如何把 "Persons" 表中 "LastName" 列的 "Gates" 改为 "Wilson" ?
您的回答:UPDATE Persons SET LastName='Wilson' WHERE LastName='Gates'
19.通过 SQL,您如何在 "Persons" 表中删除 "FirstName" 等于 "Fred" 的纪录?
您的回答:DELETE FROM Persons WHERE FirstName = 'Fred'
20.通过 SQL,您如何返回 "Persons" 表中记录的数目?
您的回答:SELECT COUNT(*) FROM Persons
DROP TABLE IF EXISTS `gao_info`;
CREATE TABLE `gao_info`
( `id` int(11) NOT NULL AUTO_INCREMENT,
`no` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`course` varchar(100) DEFAULT NULL,
`scouse` int(11) DEFAULT NULL,
PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8; mysql 建一张表.
left join 和left outer join 这两个是一样的,可以又学习到了.
(可以随便找了个PDF下载,没想到这么有用.那就多看下.回去了也能再看.才1.6M,它给我的价值还是比较大的)
数据的删除,数据有生命周期,当一张表不用时,可以进行删除.不过要先删除它的引用表. delete 删除了数据,表结构还在. drop 把整个表都删除了,结构也不存在了
实际操作
以前都只是看,现在自己也动手开始写.知行合一可以解决问题.
AS 别名,这个其实可以省略不写的.也是正确的
多了一个逗号,语法错误那就肯定是语法错要细下心来解决问题.
使用 where 指定过滤条件就好
select MAX (FSalary ) as "最大工资" from t_employee where FAge > 25 别名不能写在里面.
UPDATE T_Employee SET FName = "柏喜" WHERE FNumber = "IT002" 更新语句: 后面记得加SET
COUNT (*)--是显示结果集的总条目数, COUNT (FNumber)单单只是显示了这个字段的条目数.弄清楚,不要混淆了
这些都是很简单的操作,真实业务会比这个麻烦的多. 来一点高级的检索方式,实现我的需求.放心.我觉得离HANA大成应该不远了.这事情应该是没有多难的事情.
高级检索,柏喜.你可以的
模糊检索,_ 单个匹配. %广泛的匹配
SELECT FName ,FNumber,FAge FROM t_employee WHERE FAge IN (22,25,28) 可以用 IN 在SQL 里面这样就可以设定一个集合了很方便呢.不用写很多个 OR 果然早想到这个问题了.(你是傻子吗,这个不是你早写在笔记里了,服了,只是一直没有真正的去理解.)
group by 通常与聚合函数一起使用. 放在select 后面 或者where 后面.才是对的
分组其实有点模糊的,今天不在状态. 分组之后的数据.对数据进行细分总结.
这里的
where 改成having 才是正确的 , having不能包含未声明的字段
SQL 语句里函数后面的括号不能有空格 MAX(fname) , MAX (FNAME) --这个有点难理解,真恶心.这是我见过最无理的报错.一些版本有这个问题
我觉得这些绝对值的函数应该使用的都挺少才对,制作报表觉得应该不会用到.如果使用,也可以在WEBI里写公式.
ABS()绝对值函数, POWER()指数函数, SQRT()开平方根,
函数值的计算 DATE_ADD ,语法(DATE,INTERVAL expr type) 利用这个函数去计算年月.不能单纯的加减.
MICROSECOND 数值类型 以微秒为计算单位
SECOND 数值类型 以秒为计算单位
MINUTE 数值类型 以分钟为计算单位
HOUR 数值类型 以小时为计算单位
DAY 数值类型 以天为计算单位
WEEK 数值类型 以周为计算单位
MONTH 数值类型 以月为计算单位
QUARTER 数值类型 以季度为计算单位
YEAR 数值类型 以年为计算单位
关于日期函数的应用,有用,但应该不会马上使用.其实已经可以算是很深入的学习SQL了.这些东西基本已经可以够我制作报表了.实在不行的还有webi进行补充.其实后面学了很大一部分需要在webi里写的公式.但是也可以在数据库进行操作,个人认为不是特别有必要尽量不在源数据做非常多的处理.因为这样展示层变更.只能去底层数据库改不可以在上面写公式来实现.也就是更便捷可是面也就更狭窄了.先把EXCEL填了.写完了.把那个四张表做一个处理看能不能实现用户的需求
在表连接的SQL 语句当中 SELECT 后面是所选的字段, from后面接表名 ,join 后面指要连接的表 ,on后面接要连接的条件
总结:
本来就想学下SQL,发现数据库博大精深啊.静态的SQL都没学好.突然莫名其妙发现一个动态的SQL.鱼对于他们不曾探究的东西就是深不见底.现在你觉得难,那是因为你不曾细心去探究.oracle和mysql.
oracle定位比较准确,它是单一客户定制的.它很完善部署上线几乎不怎么用去系统化管理.出现问题时,需要深入的业务知识,对于编写SQL有较高的需求.
Mysql业务是比较简单,sql也相对简单.对java,Python要求较高.
说实话,现在SQL看的很多了,但是没有实践过.没有用起来,这是个很大的问题.现在就有一个机会HANA建模,明天开始正式开始建模.
以前一直都是看,没有实际动手去操作.发现了.你操作起来还是不一样.可以加深自己的理解.有一种懵懵懂懂的感觉.以前都是心如明镜.现在反而头脑不清醒了.这正是说明了.原先我是在水上看水没有进来.再等一段时间.我可以跳出不清醒,变得心如明镜就好.这个是一个开口向下的二次函数.先攀登.然后顶峰理解之后.就越来越明白.麻烦越来越不能对你造成麻烦.
动态语句还是没有学会,要去深究一下,你想一下.那个开始的静态语句.你觉得很难.现在觉得还好了.动态的也是.只要你肯学习.没什么难的到你的.只是现在脑子一团浆糊.没有思考的能力.有点糊糊涂涂.晚上走到三号门直接开始跑步.这下没办法了东西不可能放在外面只能带着去了.拿着就拿着呗.跑慢一点.今天就算休息了.没什么大不了的.明天看来要放假了
SQL 里面的 IN 其实和 weibi 里面的inlist 是差不多的
关于日期函数的应用,有用,但应该不会马上使用.其实已经可以算是很深入的学习SQL了.这些东西基本已经可以够我制作报表了.实在不行的还有webi进行补充.其实后面学了很大一部分需要在webi里写的公式.但是也可以在数据库进行操作,个人认为不是特别有必要尽量不在源数据做非常多的处理.因为这样展示层变更.只能去底层数据库改不可以在上面写公式来实现.也就是更便捷可是面也就更狭窄了.先把EXCEL填了.写完了.把那个四张表做一个处理看能不能实现用户的需求
可以,SQL不说非常熟.也是理论知识学了个遍了.基本没什么遗漏的了.现在需要大量的实战,来检验你的SQL技巧了.其实应该也不会太难.你写了那么多行.把它都记在你的本子好了