SQL 学习
1. 概念
2. 查询
2.1 SELECT 语句基本结构
2.2 基本查询
2.3 别名的使用
2.4 删除查询结果中的重复数据
2.5 限制查询结果
2.6 连接列值
2.7 查询中使用计算列
2.8 查询中使用表达式
2.9 条件查询-WHERE
2.10 范围查询-BETWEEN
2.11 日期查询
2.12 过滤数据
2.13 格式化结果集
2.13.1 格式化日期
2.13.2 数据表的数值类型转换--CAST()
2.13.3 去掉空格--LTRIM()
2.14 模糊查询--LIKE
2.15 行数据过滤
2.16 数据排序
2.16.1 数值排序
2.16.2 汉字排序--COLLATE Chinese_PRC_
2.17 数据统计分析
2.18 分组统计
2.18.1 创建分组
2.18.2 使用 ROLLUP 关键字
2.18.3 使用 CUBE 关键字
2.18.4 使用 HAVING 子句进行过滤分组
2.18.5 SELECT 子句的顺序
2.19 子查询
2.19.1 简单子查询
2.19.2 多行子查询
2.20 多表连接
2.20.1 内连接
2.20.2 外连接
2.20.3 其他连接
2.20.4 组合查询--UNION
3. 插入数据--INSERT
3.1 插入单行数据
3.2 插入多行数据
3.3 表中数据的复制
4. 更新删除数据
4.1 更新修改--UPDATE
4.2 删除数据-DELETE
5. 使用视图
5.1 视图的优点
5.2 创建视图
5.3 删除视图
5.4 视图的应用
6. 使用存储过程
6.1 存储过程概述
6.2 SQL Server 存储过程:
6.3 Oracle 创建存储过程
6.4 MySQL 创建存储过程
7. 使用游标
7.1 声明游标
7.2 打开游标
7.3 读取游标中的数据
7.4 关闭并释放游标
8. 事务处理
8.1 事务概述
8.2 显式事务
8.3 隐式事务
8.4 事务操作
9. 数据库管理
9.1 创建数据库
9.2 修改数据库
9.3 删除数据库
10. 数据表管理
10.1 创建数据表
10.2 查看数据表
10.3 修改数据表
10.4 删除数据表
1. 概念
1.1 数据库基本概念
数据(Data) :描述事物的符号记录
数据库(DataBase, a.k.a DB) :存放数据的仓库
数据库管理系统(DataBase Management System, a.k.a DBMS) :科学地组织和存储数据,高效地获取和维护数据。如 SQL Sever, Oracle, MySQL 等。
数据库系统(DataBase System, a.k.a DBS) :在计算机系统中引入数据库后的系统
1.2 SQL 概述
SQL 全称为 Structured Query Language ,即结构化查询语言 。功能包括数据查询、数据操纵、数据定义和数据控制四个部分。
数据定义语言(Data Definition Language, a.k.a DDL) :允许用户定义存储数据的结构和组织,以及存储数据项之间的关系
数据检索语言 :允许用户或应用程序从数据库中检索存储的数据并使用
数据操纵语言(Data Manipulation Language, a.k.a DML) :允许用户或应用程序通过增、删、改来对数据库进行更新
数据控制语言(Data Control Language, a.k.a DCL) :可以使用 SQL 语言来限制用户检索、添加和修改数据的能力,保护存储的数据不被未授权的用户所访问
数据共享 :可以使用 SQL 来协调多个并发用户共享数据,确保他们不会互相干扰
数据完整性 :SQL 语言在数据库中定义完整性约束条件,使它不会因不一致的更新或系统失败而遭到破坏
2. 查询
2.1 SELECT 语句基本结构
SELECT 语句可以从数据表中或视图中进行查询,并将查询结果以表格的形式返回,称为结果集
SELECT 的主要结构如下
SELECT select_list # 指定要查询的列,* 代表所有列
[INTO new_table] # 创建新表并将查询行插入新表中
FROM table_name # 指定要查询的表,可能包括基表,视图和链接表
[WHERE search_condition] # 搜索条件,无法使用聚合函数
[GROUP BY group_by_expression] # 根据 group_by_expression 列中的值将结果集分组
[HAVING search_condition] # 指定组或聚合的搜索条件。通常用于处理 GROUP BY 之后的数据
[ORDER BY order_expression [ASC | DESC]]; # 定义结果集中的行排列的顺序,默认为 ASC 升序
2.2 基本查询
单列
SELECT select_list FROM table_name;
多列
SELECT list1, ..., listn FROM table_name;
所有列
SELECT * FROM table_name;
2.3 别名的使用
使用方法
SELECT list "别名" FROM table_name;
SELECT list '别名' FROM table_name;
SELECT list 别名 FROM table_name;
SELECT list AS "别名" FROM table_name;
# 别名中有空格时必须使用引号
使用场景
SELECT list_name AS "名称" FROM table;
SELECT table1.list AS "表一的列", table2.list AS "表二的列"
FROM table1, table2
WHERE table1.id = table2.id;
SELECT list1 AS "A", list2 AS "B", (list1 - list2) AS "DIFF" FROM table;
SELECT MAX(list1) AS "MAX", MIN(list2) AS "MIN" FROM table;
2.4 删除查询结果中的重复数据
SELECT [DISTINCT | ALL] list FROM table; # DISTINCT 只能使用一次且必须放在第一位
2.5 限制查询结果
SQL Server:
SELECT TOP n list FROM table; # 查询前 n 行,n 介于 0 ~ 4294967295
MySQL:
SELECT list FROM table LIMIT n; # 查询前 n 行
SELECT list FROM table LIMIT m, n; # 从第 m 行开始的 n 条数据信息(m 从 0 开始计算)
SELECT list FROM table LIMIT n OFFSET m; # 从第 m 行开始的 n 条数据信息(m 从 0 开始计算)
Oracle:
SELECT list FROM table WHERE ROWNUM <= n; # 前 n 行数据
2.6 连接列值
SELECT list1 + list2 AS "NAME" FROM table;
2.7 查询中使用计算列
SELECT (list_a * list_b - list_c) / list_d AS "NAME" FROM table;
2.8 查询中使用表达式
数值表达式
SELECT list + 50 AS 加50 FROM table;
字符表达式
SELECT convert(char(2), list) + '个' AS NAME;
使用表达式创建新列
SELECT 1+1 AS NAME1, "字符"+"串列" AS NAME2
2.9 条件查询-WHERE
基本语法结构
SELECT list FROM table WHERE condition
常用比较运算符:=, >, <, >=, <=, !>, !<, <>, !=
2.10 范围查询-BETWEEN
查询两个数或日期之间的数据,包括 m 和 n
SELECT list1 FROM table WHERE list2 BETWEEN m AND n
查询不在两个数或日期之间的数据
SELECT list1 FROM table WHERE list2 NOT BETWEEN m AND n
2.11 日期查询
GETDATE(), DATEADD()
SELECT list1 FROM table WHERE list2
BETWEEN
DATEADD(DAY, -1, GETDATE()) # DATEADD 在这里为减1天
AND
GETDATE() # 获得当前日期
计算两个日期的间隔天数
# **SQL Server**
DATEDIFF(datepart, startdate, enddate)
# datepart 为计算哪部分的时间间隔,如 year, month, day 等
# startdate enddate 分别为开始和终止日期
# **MySQL 中** 也可用 DATADIFF 函数,只计算天数
DATEDIFF(stardate, enddate)
按指定日期查询数据
DAY()
MONTH()
YEAR()
2.12 过滤数据
逻辑运算符:优先级 NOT > AND > OR
IN 操作符
SELECT list1 FROM table WHERE list2 IN (v1, v2, ...)
SELECT list1 FROM table WHERE n IN (col1, col2) # n 在 col1 列或 col2 列的行
SELECT list1 FROM table WHERE list2 NOT IN(v1, v2, ...)
2.13 格式化结果集
2.13.1 格式化日期
SQL Server
CONVERT(date_type[(length)], expression [, style])
# date_type 为目标数据类型(可选长度)
# expression 为 DATETIME 类型的数据
# style 指定转换形式,例如 120 或者 20 为 yyyy-mm-dd hh:mi:ss
可选值
输出格式
100 or 0
mon dd yyyy hh:miAM(or PM)
101
mm/dd/yy
102
yy.mm.dd
103
dd/mm/yy
104
dd.mm.yy
105
dd-mm-yy
106
dd mm yy
107
mm dd,yy
108
hh:mm:ss
109 or 9
mon dd yyyy hh:mi:ss:mmmAM(or PM)
110
mm-dd-yy
111
yy/mm/dd
112
yymmdd
113 or 13
dd mon yyyy hh:mi:ss:mmm(24h)
114
hh:mi:ss:mmm(24h)
120 or 20
yyyy-mm-dd hh:mi:ss(24h)
121 or 21
yyyy-mm-dd hh:mi:ss.mmm(24h)
126
yyyy-mm-ddThh:mi:ss.mmm(不含空格)
130
dd mom yyyy hh:mi:ss:mmmAM(or PM)
131
dd/mm/yy hh:mi:ss:mmmAM(or PM)
MySQL
DATE_FORMAT(date, format)
# date: 一个合法的日期
# format: 规定日期/时间的输出格式
格式
说明
%a
简写的英文星期
%b
简写的英文月份
%c
数值表示的月份
%D
表示带有英文后缀的月中的第几天
%d
月中第几天(00~31)
%e
月中第几天(0~31)
%f
微秒数
%H
小时数(00~23)
%h
小时数(01~12)
%I
小时数(01~12)
%i
分钟数(00~59)
%j
年中的第几天(001~366)
%k
小时 (0-23)
%l
小时 (1-12)
%M
月名
%m
月,数值(00-12)
%p
AM 或 PM
%r
时间,12-小时(hh:mm:ss AM 或 PM)
%S
秒(00-59)
%s
秒(00-59)
%T
时间, 24-小时 (hh:mm:ss)
%U
周 (00-53) 星期日是一周的第一天
%u
周 (00-53) 星期一是一周的第一天
%W
完整的英文日期
%w
周的天 (0=星期日, 6=星期六)
%Y
年,4 位
%y
年,2 位
Oracle
TO_CHAR(expression, format)
格式
说明
YYYY
年, 4位
YYY
年,后三位
YY
年,后两位
Y
年,最后一位
YEAR
英文表示的年份
MONTH
文字表示的月份
MM
数字表示的月份
DAY
星期名
DDD
年中第几天
DD
月中第几天
D
一周第几天 1~7,1为星期日
DY
星期名缩写
WW
年中第几周
W
月中第几周
HH
12 小时 的小时
HH24
24 小时的小时
MI
分钟数
SS
秒数
AM|PM(A.M.|P.M.)
上午或下午
2.13.2 数据表的数值类型转换–CAST()
CAST(expression AS data_type)
# expression: 任何有效的 SQL Sever 表达式
# data_type: 目标类型,必须是系统所提供的数据类型
# 将浮点型转换为整型时,小数部分会舍去而不会进行四舍五入
# 将字符串转换为 decimal 类型时,需要指定精度(总位数)和小数位数,此时小数部分为四舍五入
2.13.3 去掉空格–LTRIM()
LTRIM(character_expression)
2.14 模糊查询–LIKE
通配符及其含义
通配符
说明
%
由0个或多个字符组成的任意字符串
_
任意单个字符
[]
用于指定范围,和正则表达式中类似
[^]
用于表示指定范围外的
LIKE 语句格式
WHERE list LIKE '%mr%'
WHERE list LIKE 'mr%'
WHERE list LIKE '[mr]'
WHERE list LIKE '[^a-z]'
...
转义字符使用 ESCAPE 定义
WHERE list LIKE '%10#%' ESCAPE '#'
# '#' 被定义为转义字符,其后的 '%' 被解释为普通字符
2.15 行数据过滤
2.15.1 行查询
查询指定行 :查询第 n 行,先将表中的前 n 行数据查询出来,再将表中的前 n-1 行数据查询出来,最后通过 NOT EXISTS 操作符将表中的第 n 行数据显示出来。(如下示例,其中用到了子查询)
SELECT list1, list2 FROM (SELECT TOP n * FROM table) aa
WHERE NOT EXISTS (SELECT * FROM (SELECT TOP n-1 * FROM table) bb
WHERE aa.list1=list2);
随机查询一行数据 :
SQL Server:使用 NEWID() 函数返回一个唯一的标识符值(类似随机排序,然后选择第一个)
SELECT TOP 1 list
FROM table order by NEWID();
SELECT list
FROM table
ORDER BY RAND() LIMIT 1;
SELECT list FROM(
SELECT list FROM table ORDER BY DBMS_RANDOM.VALUE())
WHERE ROWNUM=1;
在结果集中添加行号 :
SELECT (SELECT COUNT(num) FROM table A
WHERE A.num>=B.num) id, num, sn
FROM table B ORDER BY 1;
使用 ROW_NUMBER() OVER() 函数查询指定行 :
SELECT 编号, list2 FROM (
SELECT ROW_NUMBER() OVER(ORDER BY list2) 编号, list2
FROM table) a WHERE a.编号%2=1;
Oracle:取余函数使用 MOD()
MySQL 不支持 ROW_NUMBER() OVER() 函数
使用 BETWEEN…AND… 可查询指定范围内的行
2.15.2 空值判断
查询是否为空值:
SELECT list1, list2
FROM table
WHERE list2 IS [NOT] NULL;
对空值进行处理:
SELECT list1, list2, ISNULL(list3, 0) AS new_list3
FROM table;
SELECT list1, list2, NVL(list3, 0) AS new_list3
FROM table;
MySQL: ISNULL() 只返回 0 或 1
将指定值转换为空值:NULLIF()
SELECT list1, list2, NULLIF(name, 'abc') AS name
FROM table;
2.16 数据排序
2.16.1 数值排序
ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n]
# order_by_expression:指定要排序的列,列名或别名的表达式,可以指定多个排序列,第一个列为主排列,以此类推
# 默认为 ASC 升序
# ORDER BY 只能出现在 SELECT 语句的最后
# 一般情况下,排序列可以不出现在 SELECT 选择列表中,但当 SELECT 语句出现了 DISTINCT 或 UNIQUE 关键字,则 ORDER BY 只能指定前面选择列表中的项目
# 例子:
SELECT list1, list2
FROM table
ORDER BY list2 DESC;
SQL Server 中,ORDER BY 优先级高于 TOP, Oracle 中,ORDER BY 优先级低于 ROWNUM()
2.16.2 汉字排序–COLLATE Chinese_PRC_
排序规则:Chinese_PRC_[] 是指针对简体字 UNICODE 字符集的排序规则
其中后半部分有:
_BIN: 表示二进制排序
_CI(CS): 是否区分大小写,前者为不区分
_AI(AS): 是否区分重音,前者为不区分
_KI(KS): 是否区分假名类型,前者为不区分
_WI(WS): 是否区分宽度,前者为不区分
例子:按姓氏笔画排序:Chinese_PRC_Stroke_
SELECT * FROM table;
SELECT * FROM table
ORDER BY LEFT(name, 1) COLLATE Chinese_PRC_Stroke_CS_AS_KS_WS;
例子:按拼音排序:Chinese_PRC_
SELECT * FROM table;
SELECT * FROM table
ORDER BY LEFT(name, 1) COLLATE Chinese_PRC_CS_AS_KS_WS;
2.17 数据统计分析
SELECT SUM( [DISTINCT] expression)
FROM table
[WHERE condition]; # 非空值求和
SELECT AVG( [DISTINCT] expression) # expression 必须为数值型,且不允许为聚合函数和子查询
FROM table
[WHERE condition]; # 非空值 [非重复值] 求平均值
SELECT MIN( [DISTINCT] expression)
FROM table
[WHERE condition]; # 最小值(数值、字符串、日期)
SELECT MAX( [DISTINCT] expression)
FROM table
[WHERE condition]; # 最大值(数值、字符串、日期)
SELECT COUNT( [DISTINCT] * | expression) # * 为所有行,不能与 DISTINCT 一起使用
FROM table
[WHERE condition]; # [非重复值] 计数
WHERE 语句中可以使用聚合函数
SQL Server 中聚合函数不能嵌套,在 Oracle 中可以,但必须设置 GROUP BY 子句
子查询不能作为一个聚合函数的表达式
2.18 分组统计
2.18.1 创建分组
SELECT list, COUNT(*) AS 数量
FROM table
[WHERE condition]
GROUP BY list1 [, list2]
[ORDER BY item];
如果使用了 GROUP BY 子句进行分组查询,则 SELECT 查询的列必须包含在 GROUP BY 子句中或者包含在聚合函数中(否则分组拿来干嘛用的)
上述语句执行顺序为:先执行 FROM,如果存在 WHERE,则进行筛选,根据 GROUP BY 进行分组,最后根据 SELECT 子句生成结果(如果有 ORDER BY 子句的话)
对于 NULL 值,尽管 SQL 中规定 NULL<>NULL ,但在分组时会将 NULL 值都分为一组
2.18.2 使用 ROLLUP 关键字
GROUP BY ROLLUP(A, B, C) # Oracle, SQL Server
GROUP BY A, B, C WITH ROLLUP # SQL Server
系统先对 A, B, C 进行分组操作,然后对 A, B 进行分组操作, 然后对 A 进行分组操作,最后对全表分组(即全表汇总)
相当于生成了各种分类汇总
2.18.3 使用 CUBE 关键字
GROUP BY CUBE(A, B) # Oracle, SQL Server
GROUP BY A, B, C WITH CUBE # SQL Server
系统会对 A, B 分组,对 A 分组, 对 B 分组,最后对全表分组(即全表汇总)
2.18.4 使用 HAVING 子句进行过滤分组
HAVING 子句和 WHERE 子句用法相似,两者区别如下:
WHERE 不能放在 GROUP BY 后面,HAVING 可以
HAVING 是和 GROUP BY 一起用的,放在其后面,作用和 WHERE 一样
WHERE 不能用于聚合函数,HAVING可以
WHERE 用于分组前过滤,HAVING 用于分组后过滤
示例:统计 list3 小于 1000 并且 list2 大于 list2 的平均值的,根据 list1 分组的条目数量
SELECT list 1, list2, COUNT(list1) 数量
FROM table
WHERE (list3 < 1000)
GROUP BY list1, list2
HAVING (list2 >
(SELECT AVG(list2)
FROM table))
ORDER BY list2 DESC;
2.18.5 SELECT 子句的顺序
SELECT → \to → FROM → \to → WHERE → \to → GROUP BY → \to → HAVING → \to → ORDER BY
2.19 子查询
2.19.1 简单子查询
子查询的语法:
(SELECT [ALL | DISTINCT]
FROM
[WHERE ]
[GROUP BY
[HAVING ]])
子查询的 SELECT 查询必须使用圆括号
不能包括 COMPUTE 或 FOR BROWSE 子句
如果同时指定 TOP 子句,则可能只包括 ORDER BY 子句
子查询最多可以嵌套 32 层
任何可以使用表达式的地方都可以使用子查询,只要返回的是单个值
如果某个表只出现在子查询中,那么该表中的列就无法包含在输出中
子查询中可以使用聚合函数
常用语法格式:
WHERE expression [NOT] IN (子查询)
WHERE expression 比较运算符 [ ANY | ALL ] (子查询)
WHERE [NOT] EXISTS (子查询)
2.19.2 多行子查询
IN, NOT IN 进行多行子查询
IN 实现交集运算:获取 table1.list1 既在 table1 中,又在 table2 中的 table1 中的数据,并按 table1.list2 排序
SELECT *
FROM table1
WHERE list1 IN (
SELECT list1
FROM table2
WHERE table1.list1=table2.list1)
ORDER BY table1.list2;
SELECT *
FROM table1
WHERE list1 NOT IN (
SELECT list2
FROM table2);
EXISTS, NOT EXISTS
SELECT list1, list2
FROM table1
WHERE EXISTS(
SELECT list2
FROM table2
WHERE table1.list2=table2.list2);
SELECT *
FROM table1
WHERE NOT EXISTS(
SELECT list2
FROM table2
WHERE table1.list2=table2.list2);
使用量词实现多行子查询
SELECT list1, list2, list3
FROM table
WHERE list3 < SOME(
SELECT AVG(list3)
FROM table
GROUP BY list1);
ALL 要求 list3 的值小于子查询中的每一个值(全部满足比较运算)
ANY/SOME 要求 list3 的值小于子查询中的最大值(满足一个即可,如果是大于则大于最小值即可)
2.20 多表连接
2.20.1 内连接
等值连接
SELECT t1.l1, t1.l2, t2.l1
FROM t1, t2
WHERE t1.l3=t2.l2;
SELECT fieldlist
FROM table1 [INNER] JOIN table2
ON table1.column=table2.column
不等值连接:使用非 = 即可,如 >, < …
可以连接多个表
2.20.2 外连接
左外连接:左表全部包含,右表满足条件,右表不满足条件的行用 NULL 填充
SELECT fieldlist
FROM table1 LEFT JOIN table2
ON table1.column=table2.column
右外连接同理
全外连接:左右都包含,不符合条件的用 NULL 填充(MySQL, Access 和 SQLite 不支持全外连接)
2.20.3 其他连接
自连接:自身连接,相当于复制一个,成为两个表来进行连接
交叉连接:即两个表的笛卡尔积,列数相加,行数相乘,table1 的每一行都会和 table2 的每一行进行匹配
SELECT fieldlist
FROM table1
CROSS JOIN table2
2.20.4 组合查询–UNION
使用 UNION 组合多条查询结果,必须由两个或两个以上的 SELECT 语句组成,语句之间用 UNION 关键字分隔
每个 SELECT 语句中列的数目必须相同,而且对应位置上的列的数据类型必须相同或者兼容
最后的结果集中的列名是由第一个 SELECT 语句中的列名决定的
默认结果滤除了重复的行,使用 ALL 关键字返回重复的行
SELECT
FROM
WHERE
UNION [ALL]
SELECT
FROM
WHERE
...
ORDER BY ...
3. 插入数据–INSERT
3.1 插入单行数据
基本语法:
INSERT INTO table_or_view [(column_list)] VALUES (value_list)
# table_or_view: 表名或视图的名称
# column_list: 由逗号分隔的列名列表,插入整行时可以省略
# value_list: 作为一行或者多行插入一命名的表或视图中,若某一列没有值且该列允许为 NULL 值,可以使用 NULL 填充
创建表的时候允许通过 DEFAULT 关键字为列定义默认值,当插入数据时没有指定该列值,则用默认值填充
3.2 插入多行数据
使用 VALUES 关键字
INSERT INTO table_name
[(column_list)]
VALUES
(data11, data12,...),(data21, data22,...),...;
通过 SELECT 语句插入多行数据
INSERT INTO table_name
SELECT {* | fieldname1[, fieldname2...]}
FROM table_source
[WHERE search_condition];
3.3 表中数据的复制
SQL Server
SELECT [select_list]
INTO new_table
FROM table_name
WHERE search_condition;
MySQL and Oracle
CREATE TABLE new_table AS
SELECT [select_list]
FROM table_name
WHERE search_condition;
4. 更新删除数据
4.1 更新修改–UPDATE
基本语法:
UPDATE table_name
SET column1=value1, column2=value2,...
[WHERE search_condition];
若没有 WHERE 语句,则为修改全部数据
4.2 删除数据-DELETE
基本语法:
DELETE FROM
{table_name | view_name}
[WHERE search_conditions];
若没有 WHERE 语句,则为删除全部数据,此时建议使用 TRUNCATE TABLE,效率更高
TRUNCATE TABLE table_name
5. 使用视图
5.1 视图的优点
简化操作:尤其是简化复杂的多表关联查询。
建立前台和后台的缓冲
合并分割数据
提高安全性
5.2 创建视图
CREATE VIEW view_name [(column_name)]
AS select_statement
[WITH CHECK OPTION];
# view_name:视图的名称
# column_name:视图中的字段名,若不指定则使用 SELECT 语句中的字段名称。
# 如下情况必须指定:
# 1. 视图是从多个表中产生的,对于表中由数据列重名时
# 2. 列是从算术表达式、函数或常量派生得到的
# 3. 视图中的某列不同于源表中列的名称时
# select_statement:定义视图的 SELECT 语句,可以引用多个表或其他视图
# CHECK OPTION:规定在视图上执行的所有数据修改语句都必须符合由 select_statement 设置的准则
5.3 删除视图
DROP VIEW view_name;
5.4 视图的应用
通过视图简化复杂查询:通过创建视图,实现多表之间的复杂连接。利用视图可以编写一个复杂的查询语句,然后根据需要进行多次使用。
使用视图过滤不想要的数据;
通过视图显示函数的结果,此时必须提供列名
通过视图添加数据:首先,必须有权限进行插入,其次,视图未引用的字段必须在没有给定取值的情况下自动填充(比如允许空值、设有默认值等),然后,视图不能包含多个字段值的组合,或者包含使用统计函数的结果,最后,视图中不能包含 DISTINCT 或 GROUP BY 子句。
INSERT INTO
view_name [(view_column_name...)]
VALUES (view_column_value...);
通过视图更新数据:
UPDATE view_name
SET column1=expression1...
[WHERE condition];
通过视图删除数据:视图只能来自一个数据表,且不是自连接
DELETE view_name WHERE search_condition;
使用 WITH CHECK OPTION 子句:如果设置了该子句,则在视图上的 INSERT 或 UPDATE 操作都必须符合定义视图时设置的查询条件。
6. 使用存储过程
6.1 存储过程概述
概念 :存储过程(Stored Procedure)是一组预先编译好的 Transact-SQL 语句。将其放在服务器上,由用户通过指定存储过程的名字来执行它。存储过程可以作为一个独立的数据库对象,也可以作为一个单元被用户的应用程序调用。存储过程可以接收和输出参数,返回执行存储过程的状态值,还可以嵌套调用。(Access 和 SQLite 不支持存储过程)
功能 :条件执行、循环控制结构、命名变量、命名过程、语句块
6.2 SQL Server 存储过程:
创建 :
CREATE PROC[EDURE] procedure_name
[{ @parameter data_type}
[ = default] [OUTPUT]]
AS sql_statement [...n];
# procedure_name: 存储过程名称
# @parameter:过程中的参数
# data_type: 参数的数据类型
# default: 参数的默认值
# OUTPUT:表明参数是返回参数
# sql_statement:过程中要包含的任意数目和类型的 Transact-SQL 语句
执行 :
[ EXEC[UTE] procedure_name];
查看 :
sp_helptext [ @objname = ] 'name'; # 查看文本信息
sp_depends [ @objname = ] 'object'; # 查看相关性信息
sp_help [ [ @objname = ] name ]; # 查看一般信息
修改 :
ALTER PROC[EDURE] procedure_name
[ { @parameter data_type }
[ = default ] [ OUTPUT ]]
AS sql_statement [ ...n ];
删除 :
DROP PROCEDURE procedure_name;
6.3 Oracle 创建存储过程
CREATE [OR REPLACE] PROCEDURE procedure_name
(参数1 [方式1] 数据类型1, ...)
IS|AS
BEGIN
...
END;
# 方式有3种:IN 为输入参数,OUT 为输出参数,IN OUT 为输入输出参数
6.4 MySQL 创建存储过程
CREATE PROCEDURE procedure_name (方式 参数 类型)
BEGIN
...
END;
7. 使用游标
7.1 声明游标
SQL Server, MySQL:
DECLARE cursor_name CURSOR
FOR select_statement
# select_statement 不允许使用 COMPUTE,COMPUTE BY, FOR BROWSE 和 INTO 关键字
Oracle:
DECLARE
CURSOR cursor_name ([参数列表])
IS select_statement
7.2 打开游标
OPEN cursor_name
7.3 读取游标中的数据
SQL Server:
FETCH
[[NEXT | PRIOR | FIRST | LAST]
FROM
]
cursor_name
[ INTO @variable_name [, ...n]]
# NEXT:下一行,为默认值
# PRIOR:前一行
# FIRST:第一行
# LAST:最后一行
Oracle:
FETCH 游标名称 INTO {RECORD 类型变量}
7.4 关闭并释放游标
CLOSE cursor_name;
DEALLOCATE { { [GLOBAL] cursor_name } | @cursor_variable_name }
8. 事务处理
8.1 事务概述
原子性:事务是一个整体的工作单元,要么全部执行,要么全部取消
一致性:事务在完成时,必须使所有的数据都保持一致状态
隔离性:事务所做的修改必须与其他事务所做的修改隔离
持久性:事务提交后,对数据库所做的修改就会永久保存下来
8.2 显式事务
SQL Server:
BEGIN TRANSACTION name
...
COMMIT TRANSACTION
MySQL:
START TRANSACTION name
...
Oracle:
SET TRANSACTION name
...
8.3 隐式事务
打开隐式事务模式后,自动启动一个新事物,然后关闭一个事务时,执行下一条语句又会启动一个新事物,直到关闭隐式事务模式
使用 T-SQL 控制隐式事务
SET IMPLICIT_TRANSACTIONS ON # 开启隐式事务模式
...
COMMIT TRANSACTION # 提交事务
...
COMMIT TRANSACTION #提交事务
...
SET IMPLICIT_TRANSACTIONS OFF # 关闭隐式事务模式
8.4 事务操作
提交事务:
COMMIT [TRAN[SACTION]] [transaction_name | @tran_name_variable]
设置事务回退点:
SAVE TRANSACTION [savepoint_name | @savepoint_name]
回滚事务:
ROLLBACK [TRAN[SACTION]] [savepoint_name | transaction_name]
9. 数据库管理
9.1 创建数据库
CREATE DATABASE database_name # 指定数据库名称,不超过 123 个字符
[ON # 指明数据库文件和文件组的明确定义
[[,...n]] # 文件说明(说明文件用途等)
[,[,...n]]
]
[LOG ON{[,...n]}] # 指明事务日志文件的明确定义,若不指定,则自动产生一个与数据库名称相同的文件名前缀且容量为所有数据库文件大小 1/4 的事务日志文件
[COLLATE collation_name] # 指明数据库的校验方式
[FOR LOAD|FOR ATTACH]
::=
[PRIMARY] # 指定主数据库文件或主文件组,若没有则默认将第一个文件列为主文件
([NAME=logical_file_name,] # 文件在 SQL Server 中的逻辑名称
FILENAME='os_file_name' # 文件在操作系统中存储的路径和文件名称
[,SIZE=size] # 数据库的初始容量
[,MAXSIZE={max_size|UNLIMITED}] # 文件的最大容量
[,FILEGROWTH=growth_increment])[,...n] # 文件每次增容时增加的容量大小
::=
FILEGROUP filegroup_name[,...n]
9.2 修改数据库
修改数据库
ALTER DATABASE name
{ADD FILE[,...n][TO FILEGROUP filegroup_name] # 增加数据库文件[至某个文件组]
|ADD LOG FILE[,...n] # 增加的事务日志文件
|REMOVE FILE logical_file_name # 删除指定文件的定义,并删除其物理文件。文件只有为空时才能被删除
|ADD FILEGROUP filegroup_name # 增加文件组
|REMOVE FILEGROUP filegroup_name # 删除文件组的定义,并且删除其包含的所有数据库文件。文件组只有为空时才能被删除
|MODIFY FILE # 修改指定文件的属性,一次只能修改一个属性。必须使用 NAME 明确指定文件名称
|MODIFY NAME=new_dbname
|MODIFY FILEGROUP filegroup_name{filegroup_proprety|NAME=new_filegroup_name} # 修改文件组属性(READONLY:只读;READWRITE:读写;DEFAULT:文件组为默认文件组)
|SET[,...n][WITH] # 设置数据库属性
|COLLATE
}
缩小数据库
DBCC SHRINKDATABASE
( database_name [, target_percent] [, {NOTRUNCATE | TRUNCATEONLY}] )
# target_percent 为缩小后的空间大小
# NOTRUNCATE:被释放的文件空间依然保持在数据库文件的范围内,若不设置该选项,则释放的空间将被操作系统回收利用
# TRUNCATEONLY: 将所有未使用的数据空间释放并让操作系统回收利用,此时将忽略 target_percent
缩小数据文件或日志文件
DBCC SHRINKFILE
(file_name { [, target_size] | [, EMPTYFILE | NOTRUNCATE | TRUNCATEONLY] })
# EMPTYFILE:将指定文件上的数据全部转移到文件组内其他文件上
数据库更名
EXEC sp_renamedb 'old_name', 'new_name';
9.3 删除数据库
DROP DATABASE database_name [,...n];
10. 数据表管理
10.1 创建数据表
CREATE TABLE table_name (
字段名称 字段类型 [DEFAULT 默认值] [PRIMARY KEY] # 设置为主键,列值必须为唯一的,且不包含 NULL
字段名称 字段类型 [DEFAULT 默认值] [UNIQUE] # 约束为唯一值,允许 NULL
字段名称 字段类型 [DEFAULT 默认值] [NOT NULL] # 约束不允许 NULL
字段名称 字段类型 [DEFAULT 默认值] [CHECK(condition)] # 约束满足 condition
...
);
10.2 查看数据表
查看数据表信息:
EXEC sp_help table_name;
查看数据表的行数和存储空间
EXEC sp_spaceused table_name;
10.3 修改数据表
基本操作
ALTER TABLE name
{ADD 字段名称 字段类型... # 添加列,只允许添加可包含 NULL 值的列
|ALTER COLUMN 字段名称 字段类型... # 修改列的数据类型和约束条件
|ADD PRIMARY KEY(字段名称) # 添加主键,要求原来表中没有主键(主键只能有一个)
|DROP COLUMN 字段名称 # 删除字段
}
删除表中约束
# 查找约束名称
SELECT * FROM sysobjects
WHERE parent_obj IN(
SELECT id FROM sysobjects
WHERE name='table_name');
# 删除约束
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
数据表重命名
EXCU sp_rename 'old_name', 'new_name';
10.4 删除数据表
DROP TABLE table_name[,...n];
你可能感兴趣的:(数据分析学习)
【演奏的船长】数据分析学习记录W11——关于指标的定义
演奏的船长
本周主要进行数据分析比赛,未思考更多,仅整理几个基本概念:原子指标:描述业务、产品的最小数据单元,比如一条条原始记录衍生指标:某个度量结合在某个维度下的聚合值,主要是为了提升复合指标运算效率和便于分析;复合指标:根据CSF(关键成功因素)拆解出的关键衡量基准,衍生指标计算后结果。CSF(关键成功因素):对企业成功起作用的战略目标的定性描述。
大数据分析学习第十五课 自建云服务器集群离线安装Ambari2.7.5和HDP3.1.5(一)
猫头鹰数据分析
大数据 Java Hive hadoop ambari 大数据 centos hdfs
之前了解了很多关于大数据平台一站式部署管理的工具,比如ApacheAmbari和CDH,目前最新的CDH已经没有了社区版,也就是说以后使用新版本的ClouderaManager和CDH都是要收费的,这对于很多小公司来说,可能无法承受。转向Ambari是他们的一个可选项。Ambari是Apache的一个顶级开源项目,开源是其最大的优势,开源也意味着Ambari可以灵活地进行扩展,集成更多的数据组件,
速看,关于Python的17个学习网站,从基础到机器学习【建议收藏】
帅帅的Python
python 学习 机器学习
目录一、基础学习网站Python官方教程Python官方安装包地址PyCharm下载地址anaconda3清华开源下载地址二、爬虫学习网站requests官方学习网站BeautifulSoup文档网站selenium官方学习网站scrapy中文学习网站三、数据分析学习网站numpy官方文档网站pandas官方文档网站sklearn官方文档网站四、数据可视化学习网站matplotlib官方学习网站p
数据分析学习心得
游遍星辰99
一未知,已知我的工作就是发现别人不知道的。——福尔摩斯作为一个推理小说迷,我初中时就把父亲书架上、学校图书馆里的上百本推理小说全部看完。在我看来,推理的迷人之处在于它是一个从已知信息中发现未知的过程。案件发生,当前信息只有犯罪现场的痕迹,若干人的证词,他们每个人都有犯罪动机和作案时间,他们的证词里面有真话、假话,还有他们以为是真话,其实不过是个误解。侦探要做的事情就是辨别真伪,循着线索找到真凶。只
数据分析学习计划-1216
七七biubiu
拖了好久的学习计划今天才交,希望之后拖延症能改改,组织不要抛弃我5551、excel跟着知乎上秦璐的专栏,把数据分析中excel的常用操作过了一遍,比如数据透视图、vlookup、一些快捷键、常用工具等。后面还需要加强学习和熟练。2、SQLSQL必知必会和MYSQL必知必会各看了有差不多两遍,题目自己上网找着做了应该有上百道。后面计划多做题,尤其是和实际比较相关的题。3、Python在跟着SOTO
python交互式数据可视化_python数据可视化工具
weixin_39612677
python交互式数据可视化
熟知python的人都知道,python上常用的一款数据可视化工具是Matplotlib,但是Matplotlib是静态的。那么,Python中除了matplotlib外,还有哪些数据可视化工具呢?其实,在Python中,将数据可视化有多种选择,正是因为这种多样性,python才更能发挥出数据分析的好处。本文从从数据分析学习以及工作业务的角度,去梳理一下Python常用的数据可视化工具。一、pyt
数据分析学习Day2---商务与统计(第五章)
ghostdogss
1.参数统计量表示样本,而参数表示总体2.有偏估计与无偏估计但统计量都是无偏估计时,应该考虑方差即分散程度,选取最小方差的无偏估计。3.抽样分布的性质4.中心极限定理5.样本比例的抽样分布(即二项分布)
数据分析学习反思
静意
最近开始学习数据分析的课程,想要通过数据分析能力帮助自己提升工作效率、获得更多工作产出。用数据来解决问题主要体现在三步上:发现问题、处理数据、呈现结论。一、发现问题所谓问题,其实就是目标和现实之间的差距。找到真正的问题并不容易,首先的一个挑战是,需要找到可以衡量工作任务的数据,然后才能通过运算找到差距,而且难点也往往在于不知道哪些数据可以衡量自己的工作结果。第二个挑战,是很多问题发现的时候为时已晚
如何应对各种业务场景(秦路数据分析学习)小结
Eline_569f
作为一名数据分析新学习新人,形成适合自己的业务分析思维是很重要的,如何搭建好的业务模型或者业务分析框架,总结下来,主要分为以下几步。Step1:练习要结合生活场景,多练习。足够练习后,思维分析有一定的熟悉度,再开始动手熟悉业务背景,搭建分析框架。Step2:熟悉业务不同的框架,有不同的业务背景,比如电商,找到比较喜欢的电商,阅读咨询,社交网络的app,看下能不能搭出分析框架,强化下业务方面的sen
python大数据分析学习基础篇(1)——初识Python
Tiramisu1104
Python大数据分析 python
1、代码注释方法(1)在一行中,“#”后的语句不被执行,表示被注释。(2)如果要进行大段的注释,可以使用3个单引号(‘’‘)或者三个双引号(“”“)将注释内容包围。2、用缩进表示分层Python的语句块是使用代码缩进4个空格来表示分层,当然也可以使用一个Tab键代替四个空格,但不要Tab和空格同时使用,这会使程序在跨平台时不能正常运行。3、语句断行一般来说,Python的一条语句占一行,在每条语句
数据分析学习Day3---商务与统计(第六章)
ghostdogss
1.置信区间是指以很高的置信度包含目标参数的一个数字范围。2.总体均值的大样本(30个以上)置信区间:大样本根据中心极限定理可知其均值分布服从正太分布,因此以95%的置信水平可得,均值的置信区间:(ps:但总体的sigma未知时,可以用样本的标准差来替代)其中的sigma是总体的标准差,sigmax是样本的标准误p2083.总体均值的大样本(30个以下)置信区间(t统计量):自由度=n-1大样本数
python数据分析学习
积极向上的zzz
学习 数据分析
python数据分析一、Matplotlib基本使用1.1、基础绘图1.2、改进生成的图像1.2.1、设置图片大小1.2.2、保存1.2.3、修改轴的刻度1.2.4、设置中文设置1.2.5、给图形添加描述信息1.2.6、添加图例1.3、不同图像二、Numpy基本使用2.1、产生数组2.2、数组属性2.3、索引与切片2.4、花式索引注:2.5、where语句2.6、astype函数2.7、数组操作s
数据分析学习笔记1
Andytl的世界
最近在学习极客时间APP中的《数据分析实战45讲》,每天学一点,积累起来是一座高高的壁垒。以下是每天学习的笔记。《数据分析实战45讲》每日打卡开篇词,你为什么需要数据分析能力?数据是未来的石油,谁掌握了数据分析能力,谁就拥有了财富。如何学习数据分析呢?作者以前招过一个实习生,一年内从3k月薪到1.3w,总结起这个实习生的学习方法概括为:MAS方法。Multi-Dimension:想要掌握一个事物,
如何利用R语言实现logistic逐步回归
吃一口小肉丸
导语在日常学习或工作中经常会使用线性回归模型对某一事物进行预测,例如预测房价、身高、GDP、学生成绩等,发现这些被预测的变量都属于连续型变量。然而有些情况下,被预测变量可能是二元变量,即成功或失败、流失或不流失、涨或跌等,对于这类问题,线性回归将束手无策。这个时候就需要另一种回归方法进行预测,即Logistic回归。欢迎关注我的个人微信公众号:全哥的学习生涯,获取更多R语言与数据分析学习知识。在实
Python数据分析学习路线个人总结,建议收藏!
程序员二飞
python 数据分析 学习 人工智能 chatgpt 爬虫 数据挖掘
数据分析人人都有必要掌握一点,哪怕只是思维也行。下面探讨Python数据分析需要学习的知识范畴,结合自己的经历和理解,总结的学习大纲,有些章节带有解释,有些没有。当然,关于学习范畴,可能每个人的理解都不太一样,以下仅供参考。1数据分析思维数据分析属于分析思维的一个子类,有专门的数据方法论。只有先养成正确的分析思维,才能使用好数据。大多数人的思维方式都依赖于生活和经验做出直觉性的判断,最直观的体现是
成功笔记
谪仙狂客
复习完传感器全部内容看完《叹息桥》进行了一个小时的python数据分析学习完成部分仪器设计论文与老爸探讨了一些想法明日期望:仪器设计论文除设计部分外全部弄完开始过程控制论文继续python学习(结合excel)复习20个英语单词复习《激荡2020》观后感《小狗钱钱》读书笔记阅读至少一小时。写完《叹息桥》,并润色投稿。
为什么学习大数据,大数据专家写给大数据分析学习者的10个理由
大数据学习01
因为大数据爆发,因此出现了大数据开发、大数据分析这两大主流的工作方向,目前这两个方向是很热门,不少人已经在开始转型往这两个方向发展,相较而言,转向大数据分析的人才更多一点,而同时也有不少人在观望中,这边小编收集了十个为什么要学习大数据分析的十个理由。下面我们一起来看看大数据专家写给大数据分析学习者的10个理由这里还是要推荐下小编的大数据学习QQ裙:532218147,不管你是小白还是大牛,小编我都
python中操作mysql数据库CRUD(增删改查)
追梦小乐
python高级应用与数据分析学习笔记051、mysql的安装官网下载地址:https://www.mysql.com/嫌麻烦的话,也可以从从我的百度云下载:https://pan.baidu.com/s/1nvnBfgHimage.png安装成功是这样子的安装2、pymysql的安装一如既往的使用Ancoda来安装python软件,image.pngimage.png3、使用NaviCat创建数
微软杀疯了,系列第 4 弹,又开源了 1 个入门课程
开源前哨
【导语】:微软开源的初学者数据分析学习课程。这是本系列第四弹!《微软开源的机器学习课程》《微软开源的Web开发课程》《微软开源的物联网学习课程》简介Data-Science-For-Beginners是微软开源的数据分析入门教程,在10周的20节课程中学习数据分析,了解如何使用关系型数据库,再是现在流行的NoSQL数据、数据可视化,最后教你如何做数据分析。每节课都包括课前与课后测验、完成课程的书面
python爬虫基础与数据分析及可视化基础一、Python基础二、Python爬虫三、数据分析基础四、数据可视化基础
wx1871428
Python 数据分析
python基础、爬虫、数据分析学习笔记一、Python基础*I.基本数据类型*i.int、float、str、bool数据类型的定义ii.tuple(元组):iii.list(列表)iv.set(集合):v.dict(字典)II.基本控制结构*i.if-elif-else语句:ii.for语句:iii.while语句iv.in,and,or,break,contiue语句III.函数定义:IV.
python数据分析学习day03:切片索引和统计函数
weixin_44748589
nlp学习笔记 numpy
1.切片索引1.1切片和索引ndarray对象的内容可以通过索引或切片来访问和修改,与Python中list的切片操作一样。ndarray数组可以基于0-n的下标进行索引。注意:pythonlist切片操作后赋值,修改不会改变原数组的值,而numpy数组切片是原始数组视图(这就意味着,如果做任何修改,原始都会跟着更改)。这也意味着,如果不想更改原始数组,我们需要进行显式的复制,从而得到它的副本(.
一篇文章说清Python数据分析,这个学习路线绝了
Python_入门教程
数据分析 python 数据分析 学习 经验分享 python入门
近年来,数据分析师的需求非常大,90%的岗位技能需要掌握Python作为数据分析工具。2023年史上最全Python数据分析学习路线,从语言基础、数据工具、商业分析、到机器学习,一篇文章帮你搞定,奥利给!话不多说,新手自学Python数据分析的4大阶段,直接开始。第一阶段:Python语言基础数据分析的第一步就是先玩明白Python语言。Python语言简洁,入门容易,包括语言基础、常用数据结构、
0基础转行数据分析学习指南
爱数据_橙子
在转行数据分析的过程中,相信很多小伙伴都有这样的困惑:面对五花八门的学习资料,不知道从哪儿入手不了解学习到什么程度才可以去找工作没有数据分析项目经验,害怕找工作被拒为了让小伙伴们在转行过程中少走一些弯路,今天我们就来聊聊0基础入职数据分析究竟要怎么找工作。本期我们将分别从学习方式、学习内容、面试准备这三项内容展开介绍,那么废话不多说,我们开始进入正题。一、学习方式橙子将学习方式划分为2类:①裸辞学
python数据分析学习心得
m0_74342615
python 数据分析 机器学习 数据挖掘 开发语言
随着大数据技术和人工智能的不断发展,数据分析已经成为现代企业不可或缺的一部分。作为一名Python开发者,我也开始学习和探索数据分析的领域。在这篇文章中,我将分享我在学习Python数据分析方面所积累的经验。第一步是学习Python基础知识。数据分析需要处理大量的数据,因此Python的速度和内存管理功能使其成为数据分析领域中的一种通用工具。掌握Python的基础知识可以帮助我们更好地理解和应用数
大师兄的数据分析学习笔记(三十五):总结
superkmi
大师兄的数据分析学习笔记(三十四):模型评估(三)一、内容回顾上图包括了数据从获取到使用的全流程放,其中的包括数据获取、探索分析与可视化、预处理、分析建模和模型评估五部分。1.数据获取数据仓库监测与抓取用户填写日志埋点计算2.探索性数据分析与可视化2.1单因子探索分析异常值分析结构分析对比分析分布分析2.2多因子探索分析交叉分析分组分析钻取分析因子分析3.特征预处理特征使用特征获取特征处理异常值处
2020年2月7日晨间日记
小美鱼
今天是什么日子起床:8:00就寝:10:00天气:冷心情:激动纪念日:为梦想努力奋斗的日子任务清单昨日完成的任务,最重要的三件事:①得到任务学习②数据分析课程作业提交③个人微信公众号,碧水小鱼儿更文改进:整合,融会贯通习惯养成:全面学习,知识融会贯通周目标·完成进度待业中学习·信息·阅读学习数据分析学习文案健康·饮食·锻炼大吃大喝人际·家人·朋友跟欧巴,妈妈在一起工作·思考待业中最美好的三件事1.
pandas的基本功能与常用的数学统计方法
追梦小乐
python高级应用与数据分析学习笔记131、pandas的基本功能1)数据文件读取文本数据读取2)索引、选取和数据过滤3)算术运算和数据对齐4)函数的应用和映射5)重置索引2、数据文件读取文本数据读取2.1直接读取文本数据data01.csv文件name,age,source张伊曼,27,90张巧玲,27,90张诗诗,27,90张思思,27,90data02.txt文件张伊曼:27:90张巧玲:
文章复现-全外显子数据分析学习7-bam文件载入igv可视化
jiarf
whatisbambam(或者是sam,cram)文件,是比对后拿到的文件,sam文件是纯文本,非常占用存储空间,bam是sam的二进制格式,cram则是进一步压缩后的格式,这三者所记录的内容是一致的,但是bam文件是最常用的。记录了每一条reads比对到参考基因组的结果,主要有11列比较重要的信息(每一列以制表符分开):bam文件的格式,如今我们的染色体那一列没有chr了,只有数字更多的说明可以
数据分析学习笔记——第4天
咸鱼2K
学习
Python的字符串是不能变的要想改变,只能建个新的。1.字符串的编码使用的是Unicode,可以表示所有文字。(较ASCII多得多)>>>chr(88)'X'>>>ord('梁')26753>>>ord('谦')358782.引号创建字符串单引号或者双引号三个单引号或者双引号可以打多个或者多行>>>a='''name='空空',bis"haha55121"'''>>>a'name=\'空空\',
Python数据分析学习路线(非常详细)
Python_林一
python 数据分析 学习
顾名思义,数据分析就是采用适当的方法对收集来的大量数据进行分解和研究,然后提取出有价值的信息。例如:大型商超会采集顾客的购物数据,分析顾客的消费习惯,然后调整商品的摆放位置,提高商品的销量;互联网公司会采集用户的点击数据,分析用户的行为习惯,然后调整APP的菜单布局,提升用户体验。也就是说,数据分析的最终目的是为决策者提供数据支撑,辅助决策者做出正确的判断,而不是拍脑袋决定。数据分析几乎涵盖了所有
PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
java UI PHP android linux
╔-----------------------------------╗┆
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net .net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOP oracle mysql javaee G4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数 转换函数(核心) 数字函数 通用函数(核心) 字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
Mockito异常测试实例
bijian1013
java 单元测试 mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
GA与量子恒道统计
Bill_chen
JavaScript 浏览器 百度 Google 防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
angular.injector
boyitech
AngularJS AngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
使用Struts2.2.1配置
Chen.H
apache spring Web xml struts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
[职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
oracle连接(join)中使用using关键字
daizj
JOIN oracle sql using
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
C语言学习homework1
dcj3sjt126com
c homework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
Ehcache(02)——ehcache.xml简介
234390216
ehcache ehcache.xml 简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windows PHP unix Microsoft perl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
PO VO DAO DTO BO TO概念与区别
xp9802
java DAO 设计模式 bean 领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持