2016年12月29日前端
1.正態分佈vue
2.偏度mysql
偏度的絕對值數值越大表示表示分佈形態的偏斜程度越大。正則表達式
3.峯度算法
4.頻率sql
分析->描述統計->頻率數據庫
分析->描述統計—>描述數組
5.探索分析服務器
分析->描述統計->探索網絡
6.假設檢驗
假設檢驗原理:
7.多重響應法
2016年12月30日
1.共線性的評價指標:允許度,方差膨脹因子,特徵值,條件指數。
2.一元線性迴歸分析
3.多元線性迴歸
4.曲線迴歸
2017年1月3日
標準化
(2)系統聚類分析
兩步聚類
2017年1月5日
數據庫架構:
服務器->多個數據庫->多張數據庫->列和行
cmd運行以後
C:\User>mysql -h 127.0.0.1 -u root -p 遠程登陸
Enter password:123456
C:\User>mysql -u root -p 本地登陸
Enter password:123456
查看當前全部存在的數據庫
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| company |
| library |
| mysql |
| performance_schema |
| stu |
| test_db |
+--------------------+
一、建立測試數據庫test_db,
create database test_db;
二、查看建立好的數據庫test_db的定義
mysql> show create database test;
+----------+---------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------+
| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)
三、刪除測試數據庫test_db,
drop database test_db;
四、選擇數據庫:
use 數據庫名;
mysql> use test;
Database changed
建立員工表tb_emp1。
首先建立數據庫test_db,SQL語句以下:
選擇建立表的數據庫,SQL語句以下:
建立tb_emp1表,SQL語句爲:
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
查看數據表是否建立成功,SQL語句以下:
查看錶格的結構:
一、定義數據表tb_emp2,其主鍵爲id,SQL語句以下:
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(25) | no | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
create table 表名
(字符名 數據類型 字段屬性,
字段名2............
);
create table tb_tmp1
(id int(11),
name varchar(25),
deptId int(11),
salary float
);
show tables;查看錶名
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tb_emp1 |
+----------------+
1 row in set (0.00 sec)
describe 數據表名,查看錶格的結構
mysql> describe tb_emp1;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+---
-----------+------+------------+
| Engine | Support | Comment | Tr
ansactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+---
-----------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NU
LL | NULL | NULL |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO
| NO | NO |
| MyISAM | YES | MyISAM storage engine | NO
| NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO
| NO | NO |
| CSV | YES | CSV storage engine | NO
| NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO
| NO | NO |
| ARCHIVE | YES | Archive storage engine | NO
| NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YE
S | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO
| NO | NO |
+--------------------+---------+----------------------------------------------------------------+---
-----------+------+------------+
9 rows in set (0.09 sec)
二、定義數據表tb_emp3,其主鍵爲id,SQL語句以下:
+--------+-------------+------+-----+
| Field | Type | Null | Key |
+--------+-------------+------+-----+
| id | int(11) | NO | PRI |
| name | varchar(25) | YES | |
| deptId | int(11) | YES | |
| salary | float | YES | |
+--------+-------------+------+-----+
主鍵:primary key 對字段具備非空和惟一的約束(索引)。
create table tb_tmp2
(id int(11) not null primary key,
name varchar(25) not null,
deptId int(11),
salary float
);
create table tb_tmp3
(id int(11) not null ,
name varchar(25) not null,
deptId int(11),
salary float,primary key(id)
);
三、定義數據表tb_emp4,假設表中間沒有主鍵id,爲了惟一肯定一個員工,能夠把name、deptId聯合起來作爲主鍵,SQL語句以下:
+--------+-------------+------+-----
| Field | Type | Null | Key |
+--------+-------------+------+-----+
| name | varchar(25) | NO | PRI |
| deptId | int(11) | NO | PRI |
| salary | float | YES | |
+--------+-------------+------+-----+
mysql> create table tb_emp4
-> ( name varchar(25) not null,deptId int(11) not null,
-> salary float,
-> primary key(name,deptId));
Query OK, 0 rows affected (0.21 sec)
mysql> desc tb_emp4;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(25) | NO | PRI | NULL | |
| deptId | int(11) | NO | PRI | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.10 sec)
四、定義數據表tb_emp5,並在tb_emp5表上建立外鍵約束。
建立一個部門表tb_dept1,SQL語句以下:
+----------+-------------+------+-----+
| Field | Type | Null | Key |
+----------+-------------+------+-----+
| id | int(10) | NO | PRI |
| name | varchar(22) | NO | |
| location | varchar(50) | YES | |
+----------+-------------+------+-----+
普通索引 index
create table tb_emp1
( id int(11) not null primary key,
name varchar(22) not null,
location varchar(50));
外鍵: foreign key
constraint 外鍵 foreign key(字段名) references 表名
create table tb_emp5
( id int (11) not null primary key,
name varchar(25),
deptId int(11),
salary float,
constraint fk_ed foreign key(deptId) references tb_emp1(id));
定義數據表tb_emp5,讓它的鍵deptId做爲外鍵關聯到tb_dept1的主鍵id,SQL語句爲:
+--------+-------------+------+-----+
| Field | Type | Null | Key |
+--------+-------------+------+-----+
| id | int(11) | NO | PRI |
| name | varchar(25) | YES | |
| deptId | int(11) | YES | MUL |
| salary | float | YES | | 普通索引index
+--------+-------------+------+-----+
五、定義數據表tb_emp6,員工的姓名不能爲空,SQL語句以下:
+--------+-------------+------+-----+
| Field | Type | Null | Key |
+--------+-------------+------+-----+
| id | int(11) | NO | PRI |
| name | varchar(25) | NO | |
| deptId | int(11) | YES | |
| salary | float | YES | |
+--------+-------------+------+-----+
六、定義數據表tb_dept2,指定部門的名稱惟一,SQL語句以下: unique key
+----------+-------------+------+-----+
| Field | Type | Null | Key |
+----------+-------------+------+-----+
| id | int(11) | NO | PRI |
| name | varchar(22) | YES | UNI |
| location | varchar(50) | YES | |
+----------+-------------+------+-----+
create table db_dept2
(id int(11) not null primary key,
name varchar(22) unique key,
location varchar(50));
七、定義數據表tb_dept3,指定部門的名稱惟一,SQL語句以下:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | YES | UNI | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
create table tb_dept3
(id int(11) not null primary key,
name varchar(22) unique key,
location varchar(50) );
八、定義數據表tb_emp7,指定員工的部門編號默認爲1111,SQL語句以下: default
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(25) | NO | | NULL | |
| deptId | int(11) | YES | | 1111 | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
create table tb_emp7
( id int (11) not null primary key,
name varchar(25),
deptId int(11) default 1111,
salary float );
九、定義數據表tb_emp8,指定員工的編號自動遞增,SQL語句以下: auto_increment
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(25) | NO | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
create table tb_emp8
( id int(11) not null primary key auto_increment,
name varchar(25),
deptId int(11),
salary float );
自增:只能添加到具備主鍵或惟一鍵的字段名上。
十、分別使用DESCRIBE和DESC查看錶tb_dept1和表tb_emp1的表結構。
查看tb_dept1表結構,SQL語句以下:
十一、將數據表tb_dept2更名爲tb_deptment2。 再將表名tb_deptment2改成tb_dept2;
alter table 表名 rename 新表名
alter table tb_dept2 rename tb_deptment2;
十二、將數據表tb_dept1中name字段的數據類型由VARCHAR(22)修改爲VARCHAR(30)。 modify
alter table 表名 modify 字段名 新數據類型 字段屬性;
alter table tb_dept2 modify name varchar(30)not null;
1三、將數據表tb_dept1中的location字段名稱改成loc,數據類型保持不變 ,change;
alter table 表名 change字段名 新字段名 數據類型 字段屬性。
alter table tb_dept2 change location loc varchar(30);
1四、 將數據表tb_dept1中的loc字段名稱改成location,同時將數據類型變爲VARCHAR(60),
alter table tb_dept2 change loc locament varchar(60);
1五、在數據表tb_dept1中添加一個沒有完整性約束的INT類型的字段managerId(部門經理編號)
alter table 表名 add 字段名 數據類型 字段屬性 first|after 字段名
alter table tb_dept2 add managerId int;
alter table tb_dept2 add managerId1 int(11) not null first;
alter table tb_dept2 add managerId3 int(11) not null after name ;
1六、在數據表tb_dept1中添加一個不能爲空的VARCHAR(12)類型的字段column1,SQL語句以下:
alter table tb_dept2 add column1 varchar(12) not null;
1七、在數據表tb_dept1中添加一個INT類型的字段column2,SQL語句以下:
alter table tb_dept2 add column2 int;
1八、刪除數據表tb_dept1表中的column2字段。
alter table 表名 drop 字段名
alter table tb_dept2 drop managerId3;
1九、將數據表tb_dept1中的column1字段插入到location字段後面,SQL語句以下:注意column1字段已經存在。。。
alter table tb_dept2 modify column1 varchar(12) after column2;
alter table tb_dept2 change column1 column1 varchar(12) not null after managerId;
20.刪除惟一鍵
drop index|key 惟一鍵名字
2017年1月6日
1、建立數據庫company,按照下面表1和表2給出的表結構,在company數據庫中建立兩個數據表offices和employees
表1 offices表結構
字段名 |
數據類型 |
主鍵 |
外鍵 |
非空 |
惟一 |
自增 |
officeCode |
INT(10) |
是 |
否 |
是 |
是 |
否 |
city |
INT(11) |
否 |
否 |
是 |
否 |
否 |
address |
VARCHAR(50) |
否 |
否 |
否 |
否 |
否 |
表2 employees表結構
字段名 |
數據類型 |
主鍵 |
外鍵 |
非空 |
惟一 |
自增 |
enumber |
INT(11) |
是 |
否 |
是 |
是 |
是 |
lastName |
VARCHAR(50) |
否 |
否 |
否 |
否 |
否 |
firstName |
VARCHAR(50) |
否 |
否 |
否 |
否 |
否 |
mobile |
VARCHAR(25) |
否 |
否 |
否 |
是 |
否 |
officeCode |
INT(10) |
否 |
是 |
是 |
否 |
否 |
create table offices (
officeCode int(10) not null primary key unique key,
city int(11) not null,
address varchar(50));
create table employees
(enumber int(11) primary key not null unique key auto_increment,
lastName varchar(50),
firstName varchar(50),
mobile varchar(25) unique key,
officeCode int(10) not null,
constraint off_foreign foreign key(officeCode) references offices(officeCode));
一、 將數據表offices中字段名address改成ads,數據類型不變;
alter table offices change address ads varchar(50);
二、 將employees的表名改成employee。
alter atble employees rename employee;
三、 將employee表中的officeCode的位置調整到firstName的後面;
alter table employee change officeCode officeCode int(11) after firstName;
四、 刪除表employee中的主鍵
先刪除自增,才能刪除主鍵。
alter table employee modify enumber int(11) not null;
alter table employee drop key enumber;
五、 添加表employee中的主鍵
alter table employee add primary key(enmuber);
六、 將表employee中mobile的惟一約束刪除掉;
alter table employee drop key|index mobile;
七、 在表employee中mobile上添加惟一約束;
alter table employee add unique key(mobile);
一、創建表格person
+-------+------------------+------+-----+---------+----------------+
| 字段名 | 數據類型 | 空 |主鍵 | 默認值 | 自增 |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | 是 |
| name | char(40) | NO | | | 否 |
| age | int(11) | NO | | 0 | 否 |
| info | char(50) | YES | | NULL | 否 |
+-------+------------------+------+-----+---------+----------------+
create table person
(id int(10) unsigned not null primary key auto_increment,
name char(40) not null default '',
age int(11) not null default 0,
info char(50) );
二、向表格person中插入數據
+----+-------+-----+----------+
| id | name | age | info |
+----+-------+-----+----------+
| 1 | green | 21 | lawyer |
| 2 | suse | 22 | dancer |
| 3 | tom | 22 | musician |
| 4 | mike | 20 | teacher |
+----+-------+-----+----------+
insert into 表名(字段名)
values(數據1),(數據2)....
insert into person(id,name,age,info)
values(1,'green',21,'lawyer');
insert into person
values(1,'green',21,'lawyer');
insert into person(name,age,info)
values('tom',22,'musician'),('mike',20 ,'teacher');
查詢表格信息:
select 字段名from 表名 where 條件
三、創建表格person_old
+-------+------------------+------+-----+---------+----------------+
| 字段名| 數據類型 | 空 |主鍵 | 默認值 | 自增 |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | 是 |
| name | char(40) | NO | | NULL | 否 |
| age | int(11) | NO | | 0 | 否 |
| info | char(50) | YES | | NULL | 否 |
+-------+------------------+------+-----+---------+----------------+
四、向表格pers
create table person_old
(id int(10) unsigned not null primary key auto_increment,
name char(40) not null,
age int(11) not null default 0,
info char(50));
on_old中插入數據
+----+------+-----+---------+
| id | name | age | info |
+----+------+-----+---------+
| 11 | l | 20 | student |
| 12 | m | 30 | police |
+----+------+-----+---------+
insert into person_old(id,name,age,info)
values(11,'l',20,'student'),(12,'m',30,'police');
五、將另外一張錶轉存到一張表中
insert into 表名(字段名) select 字段名 from 表名2 where 條件。
insert into person(id,name,age,info)select id,name,age,info from person_old;
刪除數據:
delete from 表名 where條件。
delete from person_old where id>10;
建立表格person1,表結構和person相同:
create table 表名1 like 表名2;
create table person1 like person;
按照person表信息查詢的結果建立表格person2:
create table person2 as select* from person where id>10;
6,更新數據
對數據表person中id爲11的age改成15,name改成lining;
update 表名 set 字段名1=數據,字段名2=數據...where 條件。
update person set age=15,name='lingling' where id=11;
在person表中,更新age值爲19-22的記錄,將info字段值都改爲student;
update person set info='student' where age>=19&&age<=21;
update person set info='student1' where age>=19 and age<=21;
update person set info='studen4' where age between 19 and 22;(包括19和22)
3,刪除數據
delete from tale_name[where condition] (condtion條件)
刪除數據表person中id爲11的記錄
delete from person where id=11;
4,在person表中,刪除age值爲19-22的記錄
delete from person where age between 19 and 22;
下面以一個例子說明如何使用SELECT從單個表中獲取數據。
首先定義數據表fruits,輸入語句以下:
+---------+--------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------+--------------+------+-----+---------+
| f_id | char(10) | NO | PRI | NULL |
| s_id | int(11) | NO | | NULL |
| f_name | char(50) | NO | | NULL |
| f_price | decimal(8,2) | NO | | NULL |
+---------+--------------+------+-----+---------
爲了演示如何使用SELECT語句,須要插入以下數據:
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| a1 | 101 | apple | 5.20 |
| a2 | 103 | apricot | 2.20 |
| b2 | 104 | berry | 7.60 |
| b5 | 107 | xxxx | 3.60 |
| bj1 | 101 | blackberry | 10.20 |
| bs1 | 102 | orange | 11.20 |
| bs2 | 105 | melon | 8.20 |
| c0 | 101 | cherry | 3.20 |
| l2 | 104 | lemon | 6.40 |
| m1 | 106 | mango | 15.60 |
| m2 | 105 | xbabay | 2.60 |
| m3 | 105 | xxtt | 11.60 |
| o2 | 103 | coconut | 9.20 |
| t1 | 102 | banana | 10.30 |
| t2 | 102 | grape | 5.30 |
| t4 | 107 | xbababa | 3.60 |
+------+------+------------+---------+
insert into fruits
values('b2',103,'berry',7.60),
('b5',107,'xxxx',3.60),
('bj1',101,'blackberry',10.20),
('bs1',102,'orange',11.20),
('c0',101,'cherry',3.20),
('l2',104,'lemon',6.40),
('m1',106,'mango',15.60),
('m2',105,'xxtt',2.60),
('m3',105,'xxtt',11.60),
('o2',103,'coconut',9.20),
('t1',102,'banana',10.30),
('t2',102,'grape',5.30),
('t4',107,'xbababa',3.60);
select 字段名 from 表名
where 條件1 or|and|xor 條件2b
group by字段名
having 條件
order by 字段名 asc(升序)|desc(降序)
limit m,n;
一、從fruits表中檢索全部字段的數據,SQL語句以下:
select * from fruits;
二、查詢fruits表中f_name列全部水果名稱,SQL語句以下:
select f_name from fruits;
三、例如,從fruits表中獲取f_name和f_price兩列,SQL語句以下:
select f_name,f_price from fruits;
四、查詢價格爲10.2元的水果的名稱,SQL語句以下:
select f_name from fruits where f_price=10.2;
select f_name ,f_price from fruits where f_price=10.2;
五、查找名稱爲「apple」的水果的價格,SQL語句以下:
select f_price,f_name from fruits where f_name="apple";
六、查詢價格小於10的水果的名稱,SQL語句以下:
select f_name,f_price from fruits where f_price<10;
七、s_id爲101和102的記錄,SQL語句以下:
select * from fruits where s_id=101 or s_id=102;
select *from fruits where s_id in(101,102);
八、查詢全部s_id不等於101也不等於102的記錄,SQL語句如
不等於 <> !=
select *from fruits where s_id !=101 and s_id!=102;
select *from fruits where s_id not in (101,102);
select * from fruits where s_id<> 101 and s_id !=102;
九、查詢價格在2.00元到10.20元之間的水果名稱和價格,SQL語句以下:
select f_name,f_price from fruits where f_price>=2.00 and f_price<=10.20;
select f_name,f_price from fruits where f_price between 2.00 and 10.20;
十、查詢價格在2.00元到10.20元以外的水果名稱和價格,SQL語句以下:
select f_name,f_price from fruits where f_price<2.00 or f_price>10.20;
select f_name,f_price from fruits where f_price not between 2.00 and 10.20;
UNION合併表達查詢
union(去重的結果)
union all(不刪除重複的結果)
十一、查詢數據表fruits中f_price小於10的結果和fruits_new中s_id爲101和103的結果,SQL語句以下:
create table fruits_new like fruits;(like fruits_new 與fruits的表的屬性都是同樣,可是沒有數據)
insert into fruits_new select * from fruits;
create table fruits_new as select * from fruits;(as 表的結構屬性不一樣,可是fruits_new 有數據)
select *from fruits where f_price<10 union select *from fruits_new where s_id in (101,103);
去重:distinct
十二、查詢fruits表中的s_id有哪些:
select distinct s_id from fruits ;
EXISTS
create database if not exists test_db;
1三、查詢fruits表中是否存在s_id=107的供應商,若是存在,則查詢fruits表中的記錄,SQL語句以下
select * from fruits
where exists (select *from fruits where s_id=107);
1四、查詢fruits表中是否存在s_id=107的供應商,若是存在,則查詢fruits表中的f_price大於10.20的記錄,SQL語句以下:
select f_name, f_price from fruits where exists(select *from fruits where s_id=107)and f_price>10.20;
1五、查詢fruits表中是否存在s_id=107的供應商,若是不存在則查詢fruits表中的記錄,SQL語句以下
);
select *from fruits where not exists (select* from fruits where s_id=107);
1六、ORDER BY 字段名 asc(升序)|desc(降序):
查詢數據表fruits中水果的信息,並按照價格進行升序排列,SQL語句爲
select * from fruits order by f_price asc;
1七、查詢數據表fruits中水果的信息,首先按照s_id升序,在按照f_price進行降序排列
select * from fruits order by s_id asc,f_price desc;
LIMIT
1八、查詢數據表fruits中前5行的信息
select *from fruits limit 0,5;
1九、查詢數據表fruits中第3行到第6行的信息
select *from fruits limit 2,4;
求最大值:select max(f_price) from fruits;
求最小值:select min(f_price) from fruits;
求和:select sum(f_price) from fruits;
求平均數:select avg(f_price) from fruits;
計算:select count(f_price) from fruits;
select count(*) from fruits;
GROUP BY
select s_id,count(s_id) from fruits group by s_id;
20、查詢數據表fruits中每一個供應商各自水果的平均價格
select s_id,avg(f_price) from fruits group by s_id;
HAVING
2一、查詢每一個供應商各自水果的平均價格大於5元的記錄;
select *from fruits group by s_id having avg(f_price)>5;
2二、查找f_name全部以’b’字母開頭的水果,SQL語句以下:
like 通配符: % 單個字符:_
select f_name from fruits where f_name like 'b%';
2三、在fruits表中,查詢f_name中包含字母'g’的記錄,SQL語句以下:
select f_name from fruits where f_name like '%g%';
2四、查詢以’b’開頭,並以’y’結尾的水果的名稱,SQL語句以下:
select f_name from fruits where f_name like 'b%y';
2五、在fruits表中,查詢以字母’y’結尾,且’y’前面只有4個字母的記錄,SQL語句以下:
select f_name from fruits where f_name like '_ _ _ _y';
2六、在fruits表中,f_name中包含‘b’或者‘x'的記錄,SQL語句以下:
select * from fruits where f_name like '%b%' or f_name like '%x%';
正則表達式:regexp
以b爲開頭
select * from fruits where f_name regexp '^b';
以y爲結尾
select * from fruits where f_name regexp 'y$';
包含b或x(|兩邊可寫單個字符,也可寫字符串)
select * from fruits where f_name regexp 'b|x';
包含b或x,只能匹配單個字符
select * from fruits where f_name regexp '[bx]';
匹配字符集中除去a到x的其餘字符。
select * from fruits where f_name regexp '[^a-z]';
匹配包含y且y前面最少四個字符.
select * from fruits where f_name regexp '^____y$';
.*:*前面的字符連續出現n個,n包含0;*={0,} a.*b|b.*a
(ba)+:+表示符號以前的字符連續出現1次以上;{1,}
ba* b ba baa baaaa..... {0,}
ba+ ba baa baaaa.... {1,}
ba一塊兒連續出現兩次以上
(ba){2}
20167年 1月7日
對數據進行驗證
(1)數據->驗證->定義規則
注意連續性變量 分類型變量
2017年 1月8日
計算年齡,日期
分段
(1)計算變量 中if
以後
數據->定義便令屬性
(2)轉換->從新編碼爲不一樣的變量
(3)轉換->可視化離散化
$$$$$$多個條件進行排序。。數據->排序個案
2017 年 1 月 9日
mysql修改密碼
cmd運行
客戶端運行
多表查詢:
一、首先定義第一張數據表fruits,輸入語句以下:
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| f_id | char(10) | NO | PRI | NULL | |
| s_id | int(11) | NO | | NULL | |
| f_name | char(50) | NO | | NULL | |
| f_price | decimal(8,2) | NO | | NULL | |
+---------+--------------+------+-----+---------+-------+
二、而後須要插入以下數據:
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| a1 | 101 | apple | 5.20 |
| a2 | 103 | apricot | 2.20 |
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| b5 | 107 | xxxx | 3.60 |
| bs1 | 102 | orange | 11.20 |
| bs2 | 105 | melon | 8.20 |
| c0 | 101 | cherry | 3.20 |
| l2 | 104 | lemon | 6.40 |
| m1 | 106 | mango | 15.60 |
| m2 | 105 | xbabay | 2.60 |
| m3 | 105 | xxtt | 11.60 |
| o2 | 103 | coconut | 9.20 |
| t1 | 102 | banana | 10.30 |
| t2 | 102 | grape | 5.30 |
| t4 | 107 | xbababa | 3.60 |
+------+------+------------+---------+
三、建立第二張數據表suppliers,SQL語句以下:
+--------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+----------------+
| s_id | int(11) | NO | PRI | NULL | auto_increment |
| s_name | char(50) | NO | | NULL | |
| s_city | char(50) | YES | | NULL | |
| s_zip | char(10) | YES | | NULL | |
| s_call | char(50) | NO | | NULL | |
+--------+----------+------+-----+---------+----------------+
create table suppliers
(s_id int(11) not null primary key auto_increment,
s_name char(50) not null ,
s_city char (50) ,
s_zip char(10),
s_call char(50));
四、向數據表suppliers中插入須要演示的數據,SQL語句以下:
+------+----------------+-----------+--------+--------+
| s_id | s_name | s_city | s_zip | s_call |
+------+----------------+-----------+--------+--------+
| 101 | FastFruit Inc. | Tianjin | 300000 | 48075 |
| 102 | LT Supplies | Chongqing | 400000 | 44333 |
| 103 | ACME | Shanghai | 200000 | 90046 |
| 104 | FNK Inc. | Zhongshan | 528437 | 11111 |
| 105 | Good Set | Taiyuan | 030000 | 22222 |
| 106 | Just Eat Ours | Beijing | 010 | 45678 |
| 107 | DK Inc. | Zhengzhou | 450000 | 33332 |
+------+----------------+-----------+--------+--------+
insert into suppliers
values(101,'FastFruit Inc','TianJin','300000','48075'),
(102, 'LT Supplies','Chongqing','400000','44333'),
(103,'ACME','Shanghai','200000','90046'),
(104,'FNK Inc','Zhongshan','528437','11111'),
(105,'Good Set','Taiyuan','030000','22222'),
(106,'Just Eat Ours','BeiJing','010','45678'),
(107,'Dk Inc','Zhengzhou','450000','33332');
五、在fruits表和suppliers表之間使用內鏈接查詢。
查詢以前,查看兩個表的結構:
select *from fruits,suppliers where fruits.s_id=suppliers.s_id;
鏈接查詢:
六、在fruits表和suppliers表之間,使用INNER JOIN語法進行內鏈接查詢,SQL語句以下:
七、在fruits表和suppliers表之間,使用left join語法進行左鏈接查詢,SQL語句以下:
八、在fruits表和suppliers表之間,使用right join語法進行右鏈接查詢,SQL語句以下:
select 字段名 from 表1 inner|left|right 表2
on 表1.字段名=表2.字段名 and 條件(這個條件其實就是兩表之間的聯繫) where條件
select * from fruits inner join suppliers on fruits.s_id=suppliers.s_id;(公共的條件顯示)
select * from fruits left join suppliers on fruits.s_id=suppliers.s_id;(以左邊fruits表爲準)
select * from fruits right join suppliers on fruits.s_id=suppliers.s_id;(以右邊suppliers爲準)
左右都要,用union鏈接
select * from fruits left join suppliers on fruits.s_id=suppliers.s_id union select * from fruits right join suppliers on fruits.s_id=suppliers.s_id;
取別名:as
select * from fruits as f1 inner join suppliers as s1 on f1.s_id=s1.s_id;(公共的條件顯示)
語法書寫順序
select 字段名 from 表名
where 條件
group by 字段名
having 條件
order by 字段名
limit m,n
執行順序
from
where
group by
having
select as
union
order by
limit
判斷語句:case
case
when 條件 then 語句
when 條件 then 語句
else 語句
end
select * ,case when f_price<5 then '5元之內' when f_price between 5 and 10 then
'5-10元'
else ' 10 元以上'
end
from fruits;
select * ,case when f_price<5 then '5元之內' when f_price between 5 and 10 then
'5-10元'
else ' 10 元以上'
end as 價格區間
from fruits;
該支持漢字
安裝文件,找到配置文件my.ini
退出服務,啓動服務,要把mysql、mysqld (啓動任務管理器,進程)等服務關掉。。
‘’子查詢
九、使用內鏈接查詢供應f_id= ‘a1’的水果供應商提供的水果種類,SQL語句以下:
select * from fruits where s_id=(select s_id from fruits where f_id='a1');
select * from fruits where s_id in (select s_id from fruits where f_id='a1');
select * from
( select f_id,fruits.s_id as fs_id,f_name,f_price,suppliers.* from fruits inner join suppliers on fruits.s_id=suppliers.s_id) as f1
where s_id in (select s_id from fruits where f_id='a1');
十、ANY和SOME關鍵字是同義詞,表示知足其中任一條件,它們容許建立一個表達式對子查詢的返回值列表進行比較,只要知足內層子查詢中的任何一個比較條件,就返回一個結果做爲外層查詢的條件。
下面定義兩個表tb1和tb2:
tb1:
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num1 | int(11) | NO | | NULL | |
+-------+---------+------+-----+---------+------
create table tb1
( num1 int(11) not null );
tb2:
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num2 | int(11) | NO | | NULL | |
+-------+---------+------+-----+---------+-------+
create table tb2
(num2 int(11) not null);
十一、分別向兩個表中插入數據:
insert into tb1
values(1),(3),(5),(7),(9),(13),(17);
insert into tb2
values(2),(4),(6),(8),(10),(12);
十二、返回tb2表的全部num2列,而後將tb1中的num1的值與之進行比較,只要大於num2的其中一個值,其爲符合查詢條件的結果。
select num2 from tb2;
select num1 from tb1 where num1>any(select num2 from tb2);
select num1 from tb1 where num1>(select min(num2) from tb2);
1三、返回tb1表中比tb2表num2 列全部值都大的值,SQL語句以下:
select num1 from tb1 where num1>all(select num2 from tb2);
select num1 from tb1 where num1>(select max(num2) from tb2);
一、絕對值ABS:求2,-3.3和-33的絕對值,輸入語句以下:
select abs(2),abs(-3.3),abs(-33);
二、求餘數MOD(X,Y):對MOD(31,8),MOD(234, 10),MOD(45.5,6)進行求餘運算,輸入語句以下:
select mod(31,8),mod(234,10),mod(45.5,6);
三、返回最小整數CEILING:使用CEILING函數返回最小整數,輸入語句以下(大於等於):
select ceiling(23.45),ceiling(-23.45);
四、使用ROUND(x)函數對操做數進行四捨五入操做,輸入語句以下:
select round(23.45),round(23.123456,2),round(23.12345,0),round(12345,-1);
五、使用CHAR_LENGTH函數計算字符串字符個數,輸入語句以下:
select char_length('football'),length('football');
六、使用CONCAT函數鏈接字符串,輸入語句以下:
select concat('foot','ball');
七、使用LEFT函數返回字符串中左邊的字符,輸入語句以下:
select left('football',4);
八、使用RIGHT函數返回字符串中右邊的字符,輸入語句以下:
select right('football',4);
九、使用MID()函數獲取指定位置處的子字符串,輸入語句以下:
select mid('football',5 ) as f1,
mid( 'football',-5) as f2,
mid('football',4,2) as f3,
mid('football',-5,2) as f4;
十、使用LOCATE,POSITION,INSTR函數查找字符串中指定子字符串的開始位置,輸入語句以下:
select locate('ball','football'),
position('ball' in 'football'),
instr( 'football','ball');
十一、使用FIND_IN_SET()函數返回子字符串在字符串列表中的位置,輸入語句以下:
select find_in_set('ba','ball,foot,football,ba');
十二、使用ifnull()函數對null空值進行判斷,若是爲空,輸出第二個值。
select *,if(f_price<10,'小於10' ,'大於10') from fruits;
select ifnull(null,2);
select ifnull(null,2),ifnull(4,2);
1三、使用日期函數current_date()獲取系統當前日期,輸入語句以下:
select current_date(),curdate();
1四、使用時間函數current_time()獲取系統當前時間,輸入語句以下:
select current_time(),curtime();
1五、使用日期時間函數current_timestamp(),localtime(),now(),sysdate()獲取當前系統日期和時間,輸入語句以下:
select current_timestamp(),localtime(),now(),sysdate();
1六、使用MONTH()函數返回指定日期中的月份,輸入語句以下:
select month(now());
1七、使用MONTHNAME()函數返回指定日期中的月份的名稱,輸入語句以下:
select monthname(now());
1八、查詢兩個日期相差幾天datediff(時間1,時間2);
select datediff('2017-01-09','2016-12-27');
1九、對時間進行更新可以使用date_add(date,interval expr type)和date_sub()函數;
select date_add('2016-12-09',interval 4 day);
select date_sub('2016-12-09',interval 4 day);
2016年1月10日
一、從fruits表中檢索全部字段的數據,SQL語句以下:
select * from fruits ;
二、查詢fruits表中f_name列全部水果名稱,SQL語句以下:
select f_name from fruits;
三、從fruits表中獲取f_name和f_price兩列,SQL語句以下:
select f_name ,f_price from fruits;
四、查詢價格爲10.2元的水果的名稱,SQL語句以下:
select f_name,f_price from fruits where f_price=10.2;
五、查找名稱爲「apple」的水果的價格,SQL語句以下:
select f_price,f_name from fruits where f_name='apple';
六、在fruits表中查詢s_id = 101或者102,且f_price大於5,而且f_name=‘apple’的水果價格
和名稱,SQL語句以下:
select f_price ,f_name from fruits
where s_id in(101,102)
and f_price>5
and f_name='apple';
select f_price ,f_name from fruits
where (s_id =101 or s_id=102)
and f_price>5
and f_name='apple';
七、在suppliers表中查詢s_city等於「Tianjin」的供應商s_id,而後在fruits表中查詢全部該
供應商提供的水果的種類,SQL語句以下:
select s_id,f_name from fruits
where s_id in (select s_id from suppliers where s_city='Tianjin');
八、在suppliers表中查詢s_city等於「Tianjin」的供應商s_id,而後在fruits表中查詢全部非
該供應商提供的水果的種類,SQL語句以下:
select * from fruits
where s_id not in(select s_id from suppliers where s_city='Tianjin');
select * from fruits
where s_id not in(select s_id from suppliers where s_city='Tianjin');
select s_id,f_name from fruits
where s_id !=(select s_id from suppliers where s_city='Tianjin');
select s_id,f_name from fruits
where s_id <>(select s_id from suppliers where s_city='Tianjin');
九、查詢fruits表,爲f_name取別名fruit_name,f_price取別名fruit_price,爲fruits表取別
名f1,查詢表中f_price < 8的水果的名稱,SQL語句以下:
select f_name as fruit_name,f_price as fruit_price
from fruits as f1 where f_price<8;
十、在fruits表中,查找f_name字段中包含字母’o’或者’t’的記錄,SQL語句以下:
select * from fruits where f_name like '%o%' or f_name like '%t%';
select * from fruits where f_name regexp '[ot]'; 'o|t'
十一、在ts表中字段名爲s_id上創建外鍵鏈接到suppliers表s_id上,SQL語句爲:
外鍵必須字段的類型相同 ,而且外鍵表的外鍵字段名必須在外表的字段之中。。
delete from fruits where s_id not in(select s_id from suppliers);
create table ts
( s_id int(11) ,
constraint s_fk foreign key(s_id) references suppliers(s_id));
十二、刪除fruits表中的外鍵,SQL語句爲:
alter table fruits drop foreign key f_name;
1三、查詢fruits表中的信息,並將結果首先按照s_id升序排列,在按照水果名稱降序排列:
select * from fruits order by s_id asc,f_name desc;
1四、修改fruits表中s_id的字段名,將字段名改成fs_id,其他信息不變,SQL語句爲:
alter table fruits change s_id fs_id int(11) not null;
1五、輸出fruits表中第3行到第7行的數據,SQL語句爲:
select * from fruits limit 2,5;
1六、查詢fruits表中供應商信息及各供應商提供水果的平均價格,SQL語句爲:
select fs_id,avg(f_price) from fruits group by fs_id;
1七、查詢fruits表中每一個供應商供應的水果大於4.5元的記錄,SQL語句爲:
select * from fruits where f_price>4.5;
1八、查詢fruits表中供應商的信息,SQL語句以下:
select distinct fs_id from fruits;
1九、查詢fruits表中有多少個供應商,SQL語句以下:
先去重,在計數。
select count( distinct fs_id) from fruits;
20、查詢fruits表中每一個供應商所供應水果價格最高的記錄;
select * from fruits where (s_id,f_price) in (select s_id,max(f_price) from fruits
group by s_id);
2一、在fruits表中添加一字段名爲num1的字段,數據類型爲int,默認值爲3;(該字段爲銷售量
的意思)
alter table fruits add num1 int default 3;
2二、查詢fruits表中供應商總銷售額前三名的信息及銷售額;
select fruits.s_id ,s_name,s_city,sum(f_price*num1)
from fruits left join suppliers
on fruits.s_id=suppliers.s_id
group by f_id
order by sum(f_price*num1) desc
limit 0,3;
select s_id,sum(f_price*num1)
from fruits
group by f_id
order by sum(f_price*num1) desc
limit 0,3;
2三、查詢fruits表的信息,並添加‘單價情況’的信息,若是單價低於5元,則標明‘低於5元’
,若是單價高於10元,則代表’高於10元’,其餘的狀況,請代表‘5-10元’,SQL語句爲:
select *,case
when f_price<5 then '低於5元'
when f_price>10 then '高於10元'
else '5-10元'
end as 單價情況
from fruits;
2四、怎樣查詢fruits表中fs_id和f_name信息重複的記錄;
select * ,count(f_name) from fruits group by s_id,f_name having count(f_name)>1;
rollup的使用方法:
一、建立表格tb_1:
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| s_id | char(8) | NO | PRI | NULL | 供應商 |
| f_name | char(20) | NO | PRI | NULL | 水果名 |
| f_price |float(8,2)| NO | | NULL |水果價格|
| f_no | int(4) | NO | | NULL |銷售數量|
+---------+----------+------+-----+---------+-------+
create table tb_1
(s_id char(8) not null comment '供應商',
f_name char(20) not null comment '水果名',
f_price float(8,2) not null comment '水果價格',
f_no int(4) not null comment '銷售數量',
primary key(s_id,f_name));
二、在表格tb_1中插入一下數據:
+------+--------+---------+------+
| s_id | f_name | f_price | f_no |
+------+--------+---------+------+
| 001 | apple | 3.5 | 3 |
| 001 | banana | 3.5 | 2 |
| 001 | orange | 4.5 | 4 |
| 002 | apple | 3.3 | 5 |
| 002 | banana | 3.8 | 0 |
| 002 | orange | 4.7 | 3 |
+------+--------+---------+------+
insert into tb_1
values('001','apple', 3.5,3),
('001','banana',3.5,2),
('001' ,'orange', 4.5 , 4 ),
('002',' apple',' 3.3',' 5 '),
('002','banana' , 3.8 , 0),
('002 ' ,'orange',4.7 , 3 );
五、按照供應商來查詢表中水果的總銷售額:
select ifnull( s_id,'總計') ,f_name,sum(f_price*f_no),ifnull(f_name,'總計') from
tb_1 group by s_id,f_name with rollup;
select s_id,f_name,sum(f_price*f_no), f_price from tb_1 group by s_id,f_name with
rollup;
存儲過程:
查詢fruits信息的存儲過程;
delimiter //
create procedure pro1(in x int)
begin
select * from fruits
where fs_id=x;
end;//
drop procedure pro1
delimiter ;
create procedure 存儲過程名(參數)
SQL語句;
end;//
調用存儲過程:
call 存儲過程名(參數);
定義變量:
declare 變量名 數據類型 初始值
參數:in/out/inout 參數名 數據類型
in:
create procedure pro2(in pro_in int)
begin
select pro_in;
set pro_in=2;
select pro_in;
end;//
set @x=1 //
select @x //
call pro2(@x) //
out:
create procedure pro3(out pro_out int)
begin
select pro_out;
set pro_out=2;
select pro_out;
end;//
set@x=1//
select @x//
call pro3(@x) //elec
select @y//
inout:
create procedure pro4(inout pro_inout int)
begin
select pro_inout;
set pro_inout=2;
select pro_inout;
end;//
查看存儲過程
show procedure status;
定義變量:
declare 變量名 數量類型 初始值
declare s int default 0;
declare i int default 1;
1+2+3....+100;
while 循環:
create procedure pro5(out z int)
begin
declare s int default 0;
declare i int default 1;
while i<=100 do
set s=s+i;
set i=i+1;
end while;
select s;
set z=s;
select z;
end;//
判斷:
case:
create procedure pro6(in x int)
begin
case x
when 1 then select 1;
when 2 then select 2;
else select 3;
end case
create procedure pro6(in x int)
begin
case
when x<1 then select 1;
when x>2 then select 2;
else select 3;
end case;
end ;//
if:
create procedure pro7(in y int)
begin
if y=1 then select 1;
elseif y=2 then select 2;
else select 3;
end if;
end;//
從MySQL中導出數據:sql
注:命令行導入數據庫,>改爲< , \改爲/(不保證,有待檢驗)
一、將某數據庫中的全部表導出來:
mysqldump -u 用戶名 -p 數據庫名>路徑 文件名
C:\Users\lx>mysqldump -u root -p test>C:\aa\test.sql
Enter password: ******
二、如何以庫爲單位把數據導出來;
mysqldump -u root -p -B test>C:\aa\testB.sql
三、如何導出全部的庫:
mysqldump -u root -p -A >C:\aa\ad.sql
四、如何導出特定庫中特定表的數據:
mysqldump -u root -p test fruits>C:\aa\fruits.sql
將數據導入到數據庫中
五、如何以庫爲單位導入sql文件:
source C:/aa/fruit2.sql
mysql -u root -p <C:\aa\testB.sql
六、對於表級的備份文件:
use t1;
source C:/aa/fruits.sql
mysql -u root -p test <C:/aa/fruits.sql
七、只導出數據結構,不導出數據
mysqldump -u root -p -d test fruits>C:/aa/fruits5.sql
八、MySQL中用into outfile導出fruits的csv或txt文件
SELECT * INTO OUTFILE 文件路徑 FROM 表名
select * into outfile 'C:/Users/lx/Desktop/aa.txt'
fields terminated by ','
optionally enclosed by '"'
lines terminated by '\r\n'
from fruits;
九、導出爲txt的文件:
select * into outfile 'c:/users/fruits.txt'
fields terminated by','
optionally enclosed by '"'
lines terminated by '\r\n'
from fruits;
where fs_id between 101 and 109;
十、將csv或txt文件導入到數據庫中
Load data infile 文件路徑 into table 數據表
load data infile 'C:/Users/lx/Desktop/aa.txt' into table fruits
character set gbk
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\r\n';
導出csv和txt文件時,格式要定義好,
fields terminated定義字段終止用什麼來區分,咱們用的是「,」來區分的,optionally enclosed by’」’表示把數據文件中的字符串加雙引號「 " 」來封閉,escaped by用來規定轉義字符。
,lines terminated 表示換行。
2017年1月11日
觸發器:
建立表格訂單表ts1:
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| order_id | char(10) | NO | PRI | NULL | |
| pro_id | char(10) | NO | | NULL | |
| num | int(10) | YES | | NULL | |
+----------+----------+------+-----+---------+-------+
create table ts1
(order_id char(10) not null primary key ,
pro_id char(10) not null,
num int(10) );
建立表格商品表tt1:
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| pro_id | char(10) | NO | PRI | NULL | |
| pro_name | char(10) | NO | | NULL | |
| num | int(10) | NO | | NULL | |
+----------+----------+------+-----+---------+-------+
create table tt1
(pro_id char(10) not null primary key ,
pro_name char(10) not null,
num int(10) not null);
在商品表tt1中插入數據:
insert into tt1
values('1111','apple',50),
('1112','banana',60),
('1113','orange',50);
建立觸發器:
監控地點:
監控事件: insert ,update ,delete
觸發時間: after before
觸發事件: insert update delete
delimiter //
create trigger 觸發器名
after|before insert|update|delete on 表名
for each row
begin
SQL 語句;
end;//
一、客戶下訂單,訂單表中插入數據:('1001','1112',4),建立觸發器,要求商品表自動減去相
應的商品庫存:new.num
delimiter//
create trigger tr1
after insert on ts1
for each row
begin
update tt1 set num=num-new.num
where pro_id=new.pro_id;
end;
查看觸發器
show triggers;
insert into ts1
values ('1004','1112',50);
二、客戶取消訂單,取消訂單'1001',建立觸發器,要求商品表自動添加相應的商品庫存:
old.num
create trigger tr2
after delete on ts1
for each row
begin
update tt1 set num=num+old.num
where pro_id=old.pro_id;
end;//
三、客戶修改訂單,將訂單'1001'的數量改成8,要求商品表的庫存自動進行相應的調整.
create trigger tr3
after update on ts1
for each row
begin
update tt1 set num=num+old.num
where pro_id=old.pro_id;
update tt1 set num=num-new.num
where pro_id=new.pro_id;
end;//
update ts1 set num=8 where order_id='1002';
四、客戶下訂單,限購要求:每種商品最多隻能購買5件,建立存儲過程,自動調整下單num和商
品表相應的庫存.
create trigger tr4
before insert on ts1
for each row
begin
if new.num>5 then
set new.num=5;
end if;
update tt1 set num=num-new.num
where pro_id=new.pro_id;
end;//
drop trigger 觸發器名
mysql 數據字典
數據庫:information_schema 注:爲系統視圖,不是基本表,不存存儲數據。
表格和數據庫的信息
select* from tables where table_schema='數據庫名'|table_name='表名';
表格的字段名信息
select * from columns where talbes_schema='數據庫名'|table_name='表名';
查詢關聯表的信息:
select * from KEY_COLUMN_USAGE where 條件;
一、添加用戶:
crate user '用戶名' @'服務器名' identified by '密碼';
create user 'hongqianjin' @'localhost' identified by '123456';
drop user 'zhangsan' @'localhost';
select * from user;
二、賦予用戶權限:
grant 權限 on 數據庫.數據表 to '用戶名'@'服務器';
grant select on company.* to 'hongqianjin'@'localhost';
所有權限:
grant all privileges on *.* to 'lisi'@'localhost' identified by '123456';
查看權限:
show grants for '用戶名'@'服務器';
show grants for 'hongqianjin'@'localhost';
三、取消用戶權:
revoke 權限 on 數據庫.數據名 from '用戶名'@'服務器’;
revoke select on test.* from 'hongqianjin'@'localhost';
四、刷新權限:
flush privileges;
五、刪除用戶:
drop user '用戶名'@'服務器名'
drop user 'lisi'@'localhost';
六、修改密碼:
update user set password=password('密碼') where user='用戶名'and host='服務器';
1.關閉服務器
net stop mysql;
2.使用mysqld服務登陸,忽悠權限
mysql -n --skip- grant-tables
3使用客戶端登陸,無需密碼
update user set password=password('密碼') where user='用戶名'and host='服務器';
4.修改管理員root密碼,修改後刷新權限。
flush privileges;
5.關閉客戶端和命令窗口,登陸mysql
There’s a table X as below :
product |
SALES |
PRICE |
A |
50 |
70 |
B |
70 |
80 |
C |
60 |
90 |
D |
100 |
70 |
E |
10 |
40 |
Please draw the results from the query ;
Select X1.* FROM X AS X1 LEFT JOIN X AS X2 ON
X1.PRODUCT=X2.PRODUCT
WHERE X1.SALES>50;
product |
SALES |
PRICE |
B |
70 |
80 |
C |
60 |
90 |
D |
100 |
70 |
Select X1.* FROM X AS X1 LEFT JOIN X AS X2 ON
X1.PRODUCT=X2.PRODUCT
WHERE X2.SALES>50;
product |
SALES |
PRICE |
B |
70 |
80 |
C |
60 |
90 |
D |
100 |
70 |
There’s a table X as below :
Date |
result |
2005/5/9 |
win |
2005/5/9 |
win |
2005/5/9 |
loss |
2005/5/9 |
loss |
2005/5/10 |
win |
2005/5/10 |
loss |
2005/5/10 |
loss |
How to write a SQL script to get the results like below?
Date |
win |
loss |
2005/5/9 |
2 |
2 |
2005/5/10 |
1 |
2 |
Select * ,sun(result=’win’) as win,sun(result=’loss’) as loss from x group by dat;
select date,count(case when result='win' then 1 else null end) as win,
count(case when result='loss' then 1 else null end) as loss from x
group by date
Order by date desc;
mysql> select *,result='win' from x;
mysql> select *,sum(result='win') as win,sum(result='loss') as loss from x
-> group by dat;
mysql> select *,if(result='win',result,null) from x;
->
mysql> select *,count(if(result='win',result,null)) as win from x
-> group by dat;
請取出 tb_send表中日期(SendTime 字段)爲昨天的全部記錄:(sendTime 字段爲datetime型,包含日期與時間);
數據表A(i)爲過去第n個月的表格,包括客戶號 CUSTID、交易日期 TXNDATE、交易金額 TXNAMT、 商戶類型 MCC。
如何知道在過去的 3 個月裏至少連續 2 個月有 POS 交易的客戶數
select count(*) from
(select distinct custid from a1 Where custid in(select distinct custid from a2)
union
select distinct custid from a2 Where custid in(select distinct custid from a3)) as f1;
select count(*) from
(slect distinct custid from a1 inner join a2 on a1.custid=a2.custid
union
select distinct custid from a1 inner join a2 on a1.custid=a2.custid) as f1;
select custid from
(select distinct custid from A1
union all
select distinct custid from A2) as f1
group by custid having count(custid)>1;
表格A包含客戶號custid,、交易日期 TXNDATE、交易金額 TXNAMT、商戶類型 MCC,求客戶的購買週期;
請用存儲過程編寫,要求輸入兩個時間參數,查詢該時間段內客戶的購買週期:
購買週期=(最後一次購買時間 – 第一次購買時間)/( 購買次數-1)
設定購買一次的客戶購買週期是0;
create procedure pro4(in x date,in y date)
begin
select custid,ifnull(datediff(max(txndate),min(txndate))/
(count(custid)-1),0) as 購買週期 from
(select distinct custid,date(txndate) as txndate from A
where date(txndete)>x and date(txndate)<y
) as f1
group by custid;
end;//
create procedure pro4(in x date,in y date)
begin
select custid,datediff(max(txndate),min(txndate))/
(count(custid)-1) as 購買週期 from
(select distinct custid,date(txndate) as txndate from A
where date(txndete)>x and date(txndate)<y
) as f1
group by custid
having count(custid)>1
union
select custid,0 from
(select distinct custid,date(txndate) as txndate from A
where date(txndete)>x and date(txndate)<y
) as f1
group by custid
having count(custid)=1;
(select distinct custid,date(txndate) as txndate from A
where date(txndete)>x and date(txndate)<y
) as f1;
select custid,datediff(max(txndate),min(txndate))/
(count(custid)-1) as 購買週期 from f1
group by custid
having count(custid)>1
union
select custid,0 from f1
group by custid
having count(custid)=1;
select custid,ifnull(datediff(max(txndate),min(txndate))/
(count(custid)-1),0) as 購買週期 from f1
where txndete>時間1 and txndate<時間2
group by custid;
查看:
call pro4('2016-1-09','2016-12-09');
事務
(1) start transcation;
(2)
update a set mon=4500-100
where id=001;
(3) update a set mon=2000+100 where id='002';
(4)commit;
結束事務:
回滾:rollback;修改取消
提交:commit 事務文件---》數據表
2017年1月12日
一、 employee 表結構 comment’字段說明’
字段名 |
字段說明 |
數據類型 |
主鍵 |
外鍵 |
非空 |
惟一 |
自增 |
E_no |
員工編號 |
INT(11) |
是 |
否 |
是 |
是 |
否 |
E_name |
員工姓名 |
VARCHAR(50) |
否 |
否 |
是 |
否 |
否 |
E_gender |
員工性別 |
CHAR(2) |
否 |
否 |
否 |
否 |
否 |
Dept_no |
部門編號 |
INT(11) |
否 |
是 |
是 |
否 |
否 |
E_job |
職位 |
VARCHAR(50) |
否 |
否 |
是 |
否 |
否 |
E_salary |
薪水 |
INT(11) |
否 |
否 |
是 |
否 |
否 |
hiredate |
入職日期 |
DATE |
否 |
否 |
是 |
否 |
否 |
create table employee
(E_no int(11) not null primary key,
E_name varchar(50) not null,
E_gender char(2),
Dept_no int(11) not null,
E_job varchar(50) not null,
E_salary int(11) not null,
hiredate date not null,
constraint fk_ed foreign key(Dept_no) references dept(D_no)
);
二、 dept表結構
字段名 |
字段說明 |
數據類型 |
主鍵 |
外鍵 |
非空 |
惟一 |
自增 |
D_no |
部門編號 |
INT(11) |
是 |
否 |
是 |
是 |
是 |
D_name |
部門名稱 |
VARCHAR(50) |
否 |
否 |
是 |
否 |
否 |
D_location |
部門地址 |
VARCHAR(100) |
否 |
否 |
否 |
否 |
否 |
create table dept
(D_no int(11) not null primary key auto_increment,
D_name varchar(50) not null,
D_location varchar(100)
);
三、 employee 表中的記錄
E_no |
E_name |
E_gender |
Dept_no |
E_job |
E_salary |
hiredate |
1001 |
SMITH |
m |
20 |
CLERK |
800 |
2005-11-12 |
1002 |
ALLEN |
f |
30 |
SALESMAN |
1600 |
2003-05-12 |
1003 |
WARD |
f |
30 |
SALESMAN |
1250 |
2003-05-12 |
1004 |
JONES |
m |
20 |
MANAGER |
2975 |
1998-05-18 |
1005 |
MARTIN |
m |
30 |
SALESMAN |
1250 |
2001-06-12 |
1006 |
BLAKE |
f |
30 |
MANAGER |
2850 |
1997-02-15 |
1007 |
CKARK |
m |
10 |
MANAGER |
2450 |
2002-09-12 |
1008 |
SCOTT |
m |
20 |
ANALYST |
3000 |
2003-05-12 |
1009 |
KING |
f |
10 |
PRESIDENT |
5000 |
1995-01-01 |
1010 |
TURNER |
f |
30 |
SALESMAN |
1500 |
1997-10-12 |
1011 |
ADAMS |
m |
20 |
CLERK |
1100 |
1999-10-05 |
1012 |
JAMES |
f |
30 |
CLERK |
950 |
2008-06-15 |
load data infile 'C:/Users/Administrator/Desktop/22.csv' into table employee
character set gbk
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\r\n';
四、 dept表中的記錄
D_no |
D_name |
D_location |
10 |
ACCOUNTING |
ShangHai |
20 |
RESEARCH |
BeiJing |
30 |
SALES |
ShenZhen |
40 |
OPERATIONS |
FuJian |
load data infile 'C:/Users/Administrator/Desktop/11.csv' into table dept
character set gbk
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\r\n';
做業:
一、 將表employee、dept建在數據庫company下
二、 在employee表中,查詢全部記錄的e_no、e_name和e_salary字段值。
select e_no, e_name, e_salary from employee;
三、 在employee表中,查詢dept_no等於10和20的全部記錄。
Select * from employee
Where Dept_no in (10,20);
四、 在employee表中,查詢工資範圍在800-2500之間的全部記錄。
Select * from employee
Where E_salary >=800 and E_salary <=2500;
五、 在employee表中,查詢部門編號爲20的部門中的員工信息。
Select * from employee
Where Dept_no=20;
六、 在employee表中,查詢每一個部門最高工資的員工信息。
select * from employee
where (dept_no, E_salary) in (select dept_no,max(E_salary) from employee group by dept_no);
select *,max(E_salary) from (select * from employee order by E_salary desc) as f1
group by dept_no;
七、 查詢員工BLAKE所在部門和部門所在地。
select D_name, D_location from dept
where Dept_no=(select D_no from employee where E_name='BLAKE');
select e_name,dept.* from employee left join dept
where E_name='BLAKE';
八、 在employee表中,計算每一個部門各有多少名員工。
select Dept_no,count( E_no) from employee
group by Dept_no;
九、 在employee表中,計算不一樣類型職工的總工資數。
select E_job,sum(E_salary) from employee
group by E_job;
十、 在employee表中,計算不一樣部門的平均工資。
select Dept_no,avg(E_salary) from employee
group by Dept_no;
十一、 在employee表中,查詢工資低於1500的員工信息。
select * from employee
where E_salary<1500;
十二、 在employee表中,將查詢記錄先按部門編號由高到低排列,再按員工工資由高到低排列。
select * from employee
order by Dept_no desc, E_salary asc;
1三、 查詢employee表中第4行到第8行的信息。
select * from employee
limit 3,5;
1四、 從新創建一張表,表名爲new_emp,結構與employee相同,而且把數據輸入到新表中。
create table new_emp like employee;
insert into new_emp
select * from employee;
1五、 將employee表中dept_no改成d_no,數據類型不變;
alter table employee drop foreign key fk_ed;
alter table employee drop key fk_ed;
alter table employee change dept_no d_no int(10) not null;
1六、 刪除employee表中工資少於1000的數據;
delete from employee
where E_salary<1000;
索引:
設有N條隨機記錄,不用索引,平均查找N/2次。
若是使用索引後呢?
btree(二叉樹)索引
log以2爲底N的對數次
hash(哈希)索引:1次(理論上)
創建數據表books_1,在pubdate上創建普通索引,數據以下
字段名 數據類型 主鍵 外鍵 非空 惟一 自增 索引
b_id int(11) 是 否 是 是 否 否
b_name varchar(50) 否 否 是 否 否 否
author varchar(100) 否 否 是 否 否 否
price float 否 否 是 否 否 否
pubdate year(4) 否 否 是 否 否 普通索引
note varchar(100) 否 否 是 否 否 否
num int(11) 否 否 是 否 否 否
SQL語句以下:
create table books_1
(b_id int(11) null primary key,
b_name varchar(50) not null,
author varchar(100) not null,
price float not null,
pubdate year(4) not null,
note varchar(100) not null,
num int(11) not null,
index (pubdate));
二,在已經存在的表上建立索引;
alter table books_1 add key|index (num);
create index iprice on books_1(price);
三,刪除索引
alter table books_1 drop key num;
drop index iprice on books_1;
視圖:
視圖是由查詢結果造成的一張虛擬表,表格數據的更新,視圖顯示的數據也會同時更新,可是
,視圖的增刪改一樣會修改表中的數據(只有一一對應的時候才能夠修改)。
create (algorithm=merge|temptable|undefined) view 視圖名
as select 字段名 from 表名
where 條件;
create view vfruits as select * from fruits;
create view vfruits as select * from fruits inner join suppliers on fs_id=
show table status;
drop view vfruits;
2017年1月13日
一、 建立數據庫school;
二、 建立數據表class,本身設定表格結構,並存儲數據;(可直接導入數據無代碼)
專業編號 |
專業名 |
學院名 |
成立時間 |
001 |
統計 |
經濟學院 |
1965/9/1 |
002 |
自動化 |
電氣工程學院 |
1945/9/1 |
003 |
電氣 |
電氣工程學院 |
1945/9/1 |
004 |
外語 |
外語學院 |
1985/9/1 |
005 |
化學 |
化工學院 |
1955/9/1 |
006 |
計算機 |
信息科學與工程學院 |
1995/9/1 |
007 |
物流 |
管理學院 |
1995/9/1 |
三、 建立數據表student,本身設定表格結構,並存儲數據;(可直接導入數據無代碼)
注:性別中1爲男,2爲女;
學號 |
專業編號 |
姓名 |
性別 |
英語 |
數學 |
語文 |
計算機 |
體育 |
1501 |
001 |
張三 |
1 |
64 |
56 |
60 |
74 |
63 |
1532 |
002 |
李四 |
1 |
51 |
63 |
57 |
84 |
63 |
1554 |
002 |
趙武 |
1 |
76 |
87 |
81 |
56 |
75 |
1558 |
001 |
王六 |
1 |
75 |
75 |
75 |
72 |
74 |
1534 |
003 |
趙明魚 |
1 |
42 |
76 |
38 |
68 |
45 |
1564 |
003 |
諸葛強 |
1 |
76 |
77 |
76 |
70 |
74 |
1507 |
004 |
張秀 |
2 |
81 |
56 |
68 |
87 |
73 |
1589 |
005 |
王五 |
1 |
86 |
74 |
80 |
64 |
76 |
1509 |
005 |
徐鳳東 |
1 |
79 |
85 |
39 |
66 |
46 |
1510 |
005 |
鄭明明 |
2 |
79 |
79 |
35 |
78 |
59 |
1511 |
006 |
張寶全 |
1 |
77 |
77 |
77 |
73 |
76 |
1512 |
006 |
劉澤宏 |
1 |
77 |
74 |
75 |
77 |
75 |
1576 |
006 |
賀軍委 |
2 |
76 |
78 |
77 |
76 |
76 |
1523 |
003 |
於晨 |
2 |
78 |
78 |
78 |
79 |
78 |
1515 |
003 |
劉立彪 |
1 |
75 |
79 |
39 |
79 |
49 |
1567 |
002 |
葉震偉 |
1 |
91 |
74 |
82 |
78 |
81 |
1517 |
002 |
王志平 |
2 |
85 |
78 |
81 |
81 |
81 |
1543 |
007 |
黃鶯 |
2 |
82 |
78 |
80 |
84 |
81 |
1519 |
007 |
王文彬 |
1 |
91 |
87 |
89 |
94 |
90 |
四、 統計表中男女各自的人數;
五、 統計表中各科所有及格的人數;
六、 查詢student中總成績前三名的信息;
七、 統計表中總平均分以上的人數;
八、 查詢各專業的平均分;
九、 查詢各科成績的及格率;
十、 查詢每位同窗的信息和不及格的科目數;
十一、 學號尾數爲4的學生總成績;
十二、 查詢創建時間超過50年的學院學生各有多少人;
1三、 若是總分不到300分的學生‘留級’,總分數在不到350分的學生進‘三中’,總分不到400分的進‘二中’,總分達到400分的進‘一中’,請在表中添加字段名‘所升學校’,並添加數據;
1四、 學號爲’1511’的同窗語文成績誤判,現改成68分;
1五、 不及格的科目要求重考,每科補考費60元,student中同窗補考費總共多少元;
1六、 因各個學校整改,現外語專業調到別的學校,現把外語專業的信息刪除;
1七、 查詢總分在400分以上的學生和專業的信息;
1八、 怎樣確保student表中專業編號的範圍不會超出class表中專業編號的範圍;
1九、 若是知道學生的學號X,查詢出他的學號、姓名、性別(’男’,’女’)、專業名、各科成績、總成績的信息,請使用存儲過程來實現;
20、 查詢class表中記錄沒有重複的信息;
一、create database school;
二、建立表格class:
create table class
(專業編號 char(10) primary key,
專業名 char(50),
學院名 char(50),
成立時間 date
);
插入數據:
load data infile 'C:/Users/Administrator/Desktop/西線學院/MYSQL/aa.csv' into table class
character set gbk
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\r\n';
三、建立表格student:
create table student
(學號 int(11) primary key,
專業編號 char(10),
姓名 char(50),
性別 int(11),
英語 int(11),
數學 int(11),
語文 int(11),
計算機 int(11),
體育 int(11),
constraint f_key foreign key(專業編號) references class(專業編號)
);
插入數據:
load data infile 'C:/Users/Administrator/Desktop/西線學院/MYSQL/bb.csv' into table student
character set gbk
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\r\n';
四、
select if(性別=1,'男','女') 性別,count(性別) as 人數 from student
group by 性別;
五、
select count(*) as 所有及格人數 from student
where 英語>=60 and 數學>=60 and 語文>=60 and 計算機>=60 and 體育>=60;
select sum(英語>=60 and 數學>=60 and 語文>=60 and 計算機>=60 and 體育>=60) as 所有及格人數 from student;
六、
select * from student
order by 總分 desc
limit 3;
七、select count(*) from student
where 總分>(select avg(總分) from student);
八、select 專業編號,avg(英語),avg(數學),avg(語文),avg(計算機),avg(體育),round(avg(總分),2) from student
group by 專業編號;
九、
select concat(round(sum(英語>=60)/count(學號)*100,2),'%') as 英語及格率,
concat(round(sum(數學>=60)/count(學號)*100,2),'%') as 數學及格率,
concat(round(sum(語文>=60)/count(學號)*100,2),'%') as 語文及格率,
concat(round(sum(計算機>=60)/count(學號)*100,2),'%') as 計算機及格率,
concat(round(sum(體育>=60)/count(學號)*100,2),'%') as 體育及格率
from student;
十、
select *,(英語<60)+(數學<60)+(語文<60)+(計算機<60)+(體育<60) as 不及格科目數 from student;
十一、
select 學號,總分 from student
where 學號 like '%4';
十二、
select 學院名,count(學號) as 人數 from student inner join class
on student.專業編號=class.專業編號
where year(成立時間)<year(now())-50
group by 學院名;
1三、
select *,case
when 總分<300 then '留級'
when 總分<350 then '三中'
when 總分<400 then '二中'
else '一中'
end as 所升學校
from student;
1四、
update student set 語文=68 where 學號='1511';
1五、
select *,((英語<60)+(數學<60)+(語文<60)+(計算機<60)+(體育<60))*60 as 補考費 from student;
1六、
delete from student
where 專業編號=(select 專業編號 from class where 專業名='外語');
delete from class
where 專業名='外語';
1七、
select student.*,class.* from student inner join class
on student.專業編號=class.專業編號
where 總分>400;
1八、
alter table student add constraint wj foreign key(專業編號) references class(專業編號);
1九、
delimiter //
create procedure pro(in x int)
begin
select 學號,姓名,專業名,if(性別=1,'男','女'),英語,數學,語文,計算機,體育,總分
from student inner join class
on student.專業編號=class.專業編號
where 學號=x;
end;//
20、
select * from class
group by 專業編號,專業名,學院名,成立時間
having count(*)=1;
總結
插入數據
insert into 表1(字段)select 字段名 from表2 where 條件;
一、建立數據庫company
二、建立表格personnel,該表結構以下:
Field |
Type |
Null |
Key |
Default |
Extra |
員工編號 |
char(10) |
NO |
PRI |
NULL |
|
員工姓名 |
varchar(50) |
NO |
|
NULL |
|
性別 |
char(10) |
NO |
|
NULL |
|
年齡 |
int(11) |
NO |
|
NULL |
|
所屬部門 |
int(11) |
NO |
|
NULL |
|
工資 |
float(10,2) |
NULL |
|
NULL |
三、建立成績表department,該表結構以下:
Field |
Type |
Null |
Key |
Default |
Extra |
部門編號 |
int(11) |
NO |
PRI |
NULL |
|
部門名稱 |
varchar(50) |
NO |
UNI |
NULL |
|
部門地址 |
varchar(50) |
NO |
|
NULL |
四、向數據表personnel中插入以下數據:
員工編號 |
員工姓名 |
性別 |
年齡 |
所屬部門 |
工資 |
001 |
程亮 |
男 |
27 |
1001 |
8000 |
002 |
劉輝 |
男 |
24 |
1001 |
5000 |
003 |
蘇康 |
男 |
26 |
1001 |
7500 |
004 |
王紅 |
女 |
24 |
1001 |
5200 |
005 |
張三 |
男 |
28 |
1001 |
7200 |
006 |
唐宏 |
男 |
25 |
1001 |
5600 |
007 |
丁丁 |
女 |
24 |
1001 |
5200 |
008 |
李樂 |
男 |
26 |
1001 |
5900 |
009 |
鄭豔 |
女 |
31 |
1002 |
7500 |
010 |
徐麗 |
女 |
25 |
1002 |
4500 |
011 |
崔霞 |
女 |
26 |
1002 |
5800 |
012 |
蘇德 |
男 |
29 |
1003 |
8500 |
013 |
趙康 |
男 |
26 |
1003 |
7600 |
014 |
孫曉剛 |
男 |
24 |
1003 |
5600 |
015 |
王紅 |
女 |
26 |
1003 |
6000 |
016 |
李明 |
男 |
29 |
1003 |
8200 |
017 |
李小小 |
女 |
24 |
1004 |
5500 |
018 |
周小康 |
男 |
25 |
1004 |
6300 |
019 |
李秀霞 |
女 |
26 |
1004 |
7000 |
020 |
趙曉曉 |
女 |
24 |
1004 |
5200 |
021 |
王紅 |
女 |
27 |
1004 |
7650 |
022 |
李樂 |
男 |
23 |
1003 |
4800 |
五、向數據表department中插入以下數據:
部門編號 |
部門名稱 |
部門地址 |
1001 |
銷售部 |
A座1樓 |
1002 |
財務部 |
A座3樓 |
1003 |
技術部 |
A座3樓 |
1004 |
人事部 |
A座2樓 |
六、查詢personnel表中員工的編號,姓名,年齡,部門名稱,工資的信息;
七、查詢department表中各個部門的人數;
八、對personnel表中員工工資進行倒敘排序;
九、查詢personnel表中第5行到第10行的數據;
十、因公司銷售情況超出預計目標,故提升銷售部人員的工資,工資提升10%,對personnel的數據進行更新;
十一、查詢出生日期在1990年以前的員工的信息及其所在部門的信息;
十二、查詢該公司在A座中3樓有多少人;
1三、查詢personnel表中的信息,信息中添加‘工資範圍’一列,主要有’5000元以內’,’5000到8000’,’8000到10000’和’10000以上’;
1四、查詢員工工資在平均工資以上的有哪些;
1五、在’三八婦女節’,公司對員工發福利,女員工工資在5000元之內的發200元,5000元到8000元的發300元,8000元以上的發400元,男員工統一發200元,請問公司合計要花費多少;
1六、建立一個簡單的存儲過程pro1,要求調用存儲過程時,輸入員工編號參數能夠查詢該員工的信息;
1七、建立一張新表person_new,將personnel和department的信息所有存儲進去;
1八、在personnel表中的所屬部門上添加索引;成功後刪除該索引;
1九、怎樣才能確保personnel表中部門編號的範圍在department表中部門編號的範圍以內;
20、查詢personnel表中同名同性的人員的信息;
2一、請建立一個存儲過程pro2,要求調用該索引時輸出1+2+…+100的和;
方法不少,不必定同樣
一、create database company;
use company;
二、CREATE TABLE personnel (
員工編號 char(10) NOT NULL,
員工姓名 varchar(50) NOT NULL,
性別 char(10) NOT NULL,
年齡 int(11) NOT NULL,
所屬部門 int(11) NOT NULL,
工資 float(10,2) NOT NULL,
primary key(員工編號)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
三、CREATE TABLE department (
部門編號 int(11) NOT NULL,
部門名稱 varchar(50) NOT NULL,
部門地址 varchar(50) NOT NULL,
PRIMARY KEY (部門編號)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
四、INSERT INTO personnel VALUES
('001','程亮','男',27,1001,8000),
('002','劉輝','男',24,1001,5000),
('003','蘇康','男',26,1001,7500),
('004','王紅','女',24,1001,5200),
('005','張三','男',28,1001,7200),
('006','唐宏','男',25,1001,5600),
('007','丁丁','女',24,1001,5200),
('008','李樂','男',26,1001,5900),
('009','鄭豔','女',31,1002,7500),
('010','徐麗','女',25,1002,4500),
('011','崔霞','女',26,1002,5800),
('012','蘇德','男',29,1003,8500),
('013','趙康','男',26,1003,7600),
('014','孫曉剛','男',24,1003,5600),
('015','王紅','女',26,1003,6000),
('016','李明','男',29,1003,8200),
('017','李小小','女',24,1004,5500),
('018','周小康','男',25,1004,6300),
('019','李秀霞','女',26,1004,7000),
('020','趙曉曉','女',24,1004,5200),
('021','王紅','女',27,1004,7650),
('022','李樂','男',23,1003,4800);
五、INSERT INTO department
VALUES (1001,'銷售部','A座1樓'),
(1002,'財務部','A座3樓'),
(1003,'技術部','A座3樓'),
(1004,'人事部','A座2樓');
六、select 員工編號,姓名,年齡,部門名稱,工資 from personnel,department
where 所屬部門=部門編號;
七、select 部門編號,部門名稱,count(*) as 部門人數 from personnel,department
where 所屬部門=部門編號
group by 部門編號;
八、select * from personnel
order by 工資 desc;
九、select * from personnel
limit 4,6;
十、update personnel set 工資=工資*1.1
where 所屬部門 in
(select 部門編號 from department where 部門名稱='銷售部');
十一、select * from personnel,department
where 所屬部門=部門編號 and year(now())-1990<年齡;
十二、select 部門地址,count(*) as 人數 from department join personnel
on 所屬部門=部門編號
where 部門地址='A座3樓';
1三、select *,case
when 工資<5000 then '5000元之內'
when 工資<8000 then '5000到8000'
when 工資<10000 then '8000到10000'
else '10000元以上'
end as 工資範圍
from personnel;
1四、select * from personnel
where 工資>(select avg(工資) from personnel);
1五、select sum(工資<5000 and 性別='女')*200+
sum(工資 between 5000 and 8000 and 性別='女')*300
+sum(工資>8000 and 性別='女')*400+sum(性別='男')*200 as 花費
from personnel;
1六、delimiter //
create procedure pro1(in x char(10))
begin
select * from personnel where 員工編號=x;
end ; //
delimiter ;
1七、create table person_new as
select * from personnel left join department on 所屬部門=部門編號
union
select * from personnel right join department on 所屬部門=部門編號;
1八、alter table personnel add index (所屬部門);
alter table personnel drop index 所屬部門;
1九、alter table personnel add constraint fk_pd foreign key(所屬部門) references department(部門編號);
20、select * from personnel
where (姓名,性別) in(
select 姓名,性別 from personnel
group by 姓名,性別
having count(*)>1);
2一、delimiter //
create procedure pro2(out z int)
begin
declare i int default 0;
declare s int default 1;
while s<=100 do
set i=i+s;
set s=s+1;
end while ;
set z=i;
select z ;
end ; //
delimiter ;
2017年1月14日
2017年2月5日
1.一元線性迴歸
(1)相關關係特指就是這種直線關係。
(2)相關關係指共同的趨向,但沒有因果關係。
(3)一元線性迴歸只涉及到一個變量的迴歸,自變量(x)和因變量(y)之間是線性關係。
注:是yi的平均值
決定係數
(1)反映模型的解釋能力
(2)反映迴歸直線的擬合程度
(3)決定係數平方根等於相關係數(僅僅在一元線性迴歸合適)
(4)決定係數特色
取值範圍在[0,1]之間
R2(R的平方)->1,說明迴歸方程擬合的越好
R2(R的平方)->0,說明迴歸方程擬合的越差
2.方差分析
1.掌握了t檢驗後,就能夠對兩組樣本的平均水平進行比較了。但若是面對的是多組樣本的比較,t檢驗就不行了,能夠用方差分析。
2.方差分析的基本思想:把數據的所有變異--總變異分解成兩個或者多個組成部分,在作分析。
3.方差分析的術語:觀測變量、控制變量、控制變量的水平
4.方差分析的應用:兩組或兩組以上均數是否相等,兩個或多個因素的交互做用,迴歸方程的線性假設檢驗
5.總方差:反映所有個體的變異狀況
6.組內方差
(1)各組組內個體之間的變異
(2)屬於隨機偏差
7.組間方差
(1)各組均數和總均數的差別
(2)除了隨機偏差,還可能有系統偏差
(3)F值
2017年2月6日
1.相關性分析:
(1)在作數據分析時,除了關注每組數據自身的特色,咱們還會關係數據和數據之間的關係,是否有着某種共同的變化趨勢,這種趨勢就是相關性,觀察相關性最簡單的方法就是用可視化進行探索。除此以外,還能夠藉助一些數字指標進行量化。
(2)相關性分析概述:
(I)函數關係:對應的肯定關係
(2)統計關係:線性關係和非線性關係。
(3)線性關係:正線性關係、負線性關係
2.線性關係的量化指標
(1)Pearson(皮爾遜)相關係數:兩個數值變量間的相關性。
(2)相關係數特色:取值範圍是[-1,1],|r|趨勢於0表示關係越弱。對稱性,x與y的相關係數和y與x之間的相關係數相等。r值大小與x和y尺度無關。x與y之間線性關係的一個度量,不能用於描述非線性關係。
(3)相關性強弱:
(I)|r|>0.8時,高度相關
(II)0.5<|r|<0.8時,中度相關
(III)0.3<|r|<0.5時,低度相關
(IV)|r|<0.3時,相關程度極弱,可視爲不相關。
(4)相關係數的檢驗
2017年2月7日
1.假設檢驗
(1)在完成基礎統計分析後,咱們對數據輪廓有了必定掌握。經過數據分析比較,也造成初步結論。但咱們獲得的結論、作出的判斷,到底有多可信?藉助假設檢驗的這個工具能夠獲得科學的判斷。
(2)假設檢驗執行步驟:創建要檢驗的假設,肯定檢驗水準,選擇並計算事宜的統計量,肯定P值,作出推斷。
(3)t分佈的特色
(I)單峯,以0爲中心,左右對稱
(II)分佈形態和樣本數量n有關
(III)n->無窮大時,逼近標準正態曲線
(IV)t曲線不是一條曲線,而是一族曲線
(4)t檢驗是基於t分佈的比較均數的檢驗方法
2017年2月9日
練習題
下面三個關係表:
CARD 借書卡: CNO 卡號,NAME 姓名,CLASS 班級
BOOKS 圖書表: BNO 書號,BNAME 書名,AUTHOR 做者,PRICE 單價,QUANTITY 庫存冊數
BORROW 借書記錄: CNO 借書卡號,BNO 書號,RDATE 還書日期
備註:限定每人每種書只能借一本;庫存冊數隨借書、還書而改變。
要求實現以下15個處理:
一、寫出創建BORROW表的SQL語句,要求定義主碼完整性約束和引用完整性約束。
二、找出借書超過5本的讀者,輸出借書卡號及所借圖書冊數。
三、查詢借閱了"水滸"一書的讀者,輸出姓名及班級。
四、查詢過時未還圖書,輸出借閱者(卡號)、書號及還書日期。
五、查詢書名包括"網絡"關鍵詞的圖書,輸出書號、書名、做者。
六、查詢現有圖書中價格最高的圖書,輸出書名及做者。
七、查詢當前借了"計算方法"但沒有借"計算方法習題集"的讀者,輸出其借書卡號,並按卡號降
序排序輸出。
八、將"C01"班同窗所借圖書的還期都延長一週。
九、從BOOKS表中刪除當前無人借閱的圖書記錄。
十、若是常常按書名查詢圖書信息,請創建合適的索引。
十一、在BORROW表上創建一個觸發器,完成以下功能:若是讀者借閱的書名是"數據庫
技術及應用",就將該讀者的借閱記錄保存在BORROW_SAVE表中(注ORROW_SAVE表
結構同BORROW表)。
十二、創建一個視圖,顯示"力01"班學生的借書信息(只要求顯示姓名和書名)。
1三、查詢當前同時借有"計算方法"和"組合數學"兩本書的讀者,輸出其借書卡號,並按
卡號升序排序輸出。
1四、假定在建BOOKS表時沒有定義主碼,寫出爲BOOKS表追加定義主碼的語句。
1五、對CARD表作以下修改:
a. 將NAME最大列寬增長到10個字符(假定原爲6個字符)。
b. 爲該表增長1列NAME(系名),可變長,最大20個字符。
練習題
下面三個關係表:
CARD 借書卡: CNO 卡號,NAME 姓名,CLASS 班級
BOOKS 圖書表: BNO 書號,BNAME 書名,AUTHOR 做者,PRICE 單價,QUANTITY 庫存冊數
BORROW 借書記錄: CNO 借書卡號,BNO 書號,RDATE 還書日期
備註:限定每人每種書只能借一本;庫存冊數隨借書、還書而改變。
要求實現以下15個處理:
一、寫出創建BORROW表的SQL語句,要求定義主碼完整性約束和引用完整性約束。
create table borrow
(cno char(15) not null,
bno char(20) not null,
rdate date not null,
primary key(cno,bno),
constraint fk_cbw foreign key(cno) references card(cno),
constraint fk_bb foreign key(bno) references books(bno));
delimiter //
create trigger tr1
after insert on borrow
for each row
begin
update books set quantity=quantity-1
where bno=new.bno;
end; //
delimiter ;
delimiter //
create trigger tr2
after delete on borrow
for each row
begin
update books set quantity=quantity+1
where bno=old.bno;
end; //
delimiter ;
二、找出借書超過5本的讀者,輸出借書卡號及所借圖書冊數。
select cno,count(bno) as 借書數 from borrow
group by cno
having count(bno)>5;
三、查詢借閱了"水滸"一書的讀者,輸出姓名及班級。
select card.cno,name,class ,bname from borrow,card,books
where card.cno=borrow.cno and books.bno=borrow.bno
and bname='水滸';
四、查詢過時未還圖書,輸出借閱者(卡號)、書號及還書日期。
select card.cno,bno,rdate from card inner join borrow
on card.cno=borrow.cno
where curdate()>rdate;
五、查詢書名包括"網絡"關鍵詞的圖書,輸出書號、書名、做者。
select bno,bname,author from books
where bname like '%網絡%';
六、查詢現有圖書中價格最高的圖書,輸出書名及做者。
select bname,author from books
order by price desc
limit 1;
七、查詢當前借了"計算方法"但沒有借"計算方法習題集"的讀者,輸出其借書卡號,並按卡號降序排序輸出。
select distinct cno from books inner join borrow
on borrow.bno=books.bno
where bname='計算方法' and
cno not in(select cno from borrow
where bno in(select bno from books where bname='計算方法習題集'))order by cno desc
;
八、將"C01"班同窗所借圖書的還期都延長一週。
update borrow set rdate=date_add(rdate,interval 1 week);
九、從BOOKS表中刪除當前無人借閱的圖書記錄。
delee from books
where not exists(select bno from borrow where bno=books.bno);
十、若是常常按書名查詢圖書信息,請創建合適的索引。
alter table books add unique(bname);
十一、在BORROW表上創建一個觸發器,完成以下功能:若是讀者借閱的書名是"數據庫
技術及應用",就將該讀者的借閱記錄保存在BORROW_SAVE表中(注ORROW_SAVE表
結構同BORROW表)。
create table borrow_save like borrow;
delimiter //
create trigger tr23
after insert on borrow
for each row
begin
insert into borrow_save
select distinct new.cno,new.bno,new.rdate from borrow
where new.bno=(select bno from books where bname='數據庫技術及應用');
end; //
十二、創建一個視圖,顯示"01"班學生的借書信息(只要求顯示姓名和書名)。
create vuew vborrow as select name,bname from card ,borrow,books
where card.cno=borrow.cno and borrow.bno=books.bno and class='01';
1三、查詢當前同時借有"計算方法"和"組合數學"兩本書的讀者,輸出其借書卡號,並按
卡號升序排序輸出。
select cno from card,borrow,books
where card.cno=borrow.cno and borrow.bno=books.bno
and (bname='計算方法' or bname='組合數學')
group by cno
having count(*)=2 order by cno asc;
1四、假定在建BOOKS表時沒有定義主碼,寫出爲BOOKS表追加定義主碼的語句。
alter table books add primary key(bno);
1五、對CARD表作以下修改:
a. 將NAME最大列寬增長到10個字符(假定原爲6個字符)。
b. 爲該表增長1列NAME(系名),可變長,最大20個字符。
alter table card modify name char(10) not null;
alter table card add xname varchar (20);
1、數組的組織和整理--數據預處理(R語言)
1.缺失值的表達方式: NA NaN Inf -lnf
2.發現缺失值
summary(),is.na(), complete.case()
3.缺失值是否有業務含義
4.把不合理數據編碼爲缺失值
5.加載包:library(VIM)
6.查看數據:str(sleep)
7.summary(sleep)
8.發現缺失值
(I)屬性級別
is.na(sleep$Sleep)
(II)is.na(NaN)
(III)
> is.na(NaN)
[1] TRUE
> is.na(-Inf)
[1] FALSE
> is.na(Inf)
[1] FALSE
> is.infinite(Inf)
[1] TRUE
(IV)
sleep$Sleep[is.na(sleep$Sleep)]
(V)
sleep$Sleep[!(is.na(sleep$Sleep))]
(VI)記錄級別
complete.cases(sleep)
(VII)
> sleep.cleaned=sleep[complete.cases(sleep),]
> View(sleep.cleaned)
> sellp.na=sleep[!(complete.cases(sleep)),]
> View(sleep.cleaned)
> sum(is.na(sleep$Sleep))
[1] 4
> mean(is.na(sleep$Sleep))
[1] 0.06451613
2.徹底隨機缺失
Missing Completely At Random,MCAR
隨機缺失
Missing At Random,MAR
非隨機缺失
NMAR
3.查看包的幫助文檔
> help(package='VIM')
4.分析函數
na.rm=T
5.行刪除
na.omit
6.配對刪除
典型函數cor(data,use="pairwise.complete.obs")
2016年2月10日
最後必定要 shift+ctrl+Enter
1.LOOKUP函數:
數據可視化-基礎繪圖體系(R)
圖形設備 pdf png jpeg bmp win.metafile postscript dev.off
高水平繪圖函數 plot pairs hist
低水平繪圖函數 points lines text abline legend title axis
2017年2月11日
日期時間、字符串的處理
字符串
nchar() length()
paste() outer()
substr() strsplit()
Sub() gsub() grep() regexpr() grepexpr()
dfdd
數據集成
merge
pylr::join
透視表分組
改爲分秒格式
輸入數組
2017年2月12日
1.最近鄰分類法基於距離的比較,本質上賦予每一個屬性相等的權重。所以,當數據存在噪聲或不相關屬性時,它們的準確率可能受到影響。
2.最近鄰分類法在對檢驗元組分類時可能很是慢。
3.粗糙集理論能夠用於分類,發現不許確數據或噪聲數據內的結構聯繫。它用於離散值屬性。所以,連續值屬性必須在使用前離散化。
4.粗糙集理論基於給定訓練數據內部的等價類的創建。造成一個等價類的全部元組是不加區分的;也就是說,對於描述數據的屬性,這些樣本是等價的。
5.半監督分類使用有類標號的數據和無類標號的數據構建分類器。
6.自我訓練是半監督分類的最簡單形式。
7.協同訓練是半監督分類的另外一種形式,其中兩個或多個分類器互教互學。理想地,每一個學習器都對每一個元組使用一個不一樣的、理想的獨立特徵集。
8.主動學習是一種迭代的監督學習,適合數據豐富但類標號稀缺或獲取昂貴的狀況。學習算法是主動的,由於它可能有目的地向用戶詢問類標號。一般,這種方法用於學習概念的元組數遠小於典型的監督學習所須要的數量。
9.高維數據聚類方法能夠分紅兩類:子空間聚類方法和維歸約方法。
10.如何從高維數據中發現子空間簇?大體能夠劃分紅三個主要類別:子空間搜索方法、基於相關性的簇聚類方法和雙聚類方法。
11.聚類的最優化目標包含兩部分:優化聚類質量和最小化違反約束的罰。整體目標函數是聚類質量得分和罰得分的組合。
12.基於密度的離羣點檢測方法的基本假設是:非離羣點對象周圍的密度與其領域周圍的密度相似,而離羣點對象周圍的密度顯著不一樣於其領域周圍的密度。根據這個假定,基於密度的離羣點檢測方法使用對象和其近鄰的相對密度指示對象是離羣點的程度。
13.樸素貝葉斯分類法假定一個屬性值在給定類上的影響獨立於其餘屬性的值。
2017年02年13日
1.VBE
開發工具選項卡調用:選項----自定義功能區
VBE就是VBA的編輯窗口,全部的VBA操做都在VBE裏完成
ALT+F11快捷鍵打開VBE
2.
填充顏色代碼: Selection.Interior.Color = 8883
3.
Sub 宏4()
' ActiveCell.FormulaR1C1 = "數據分析"
Selection = "數據分析"
Selection.Font.Size = 20
Selection.Font.Bold = True
End Sub
注意:ActiveCell 是當前活動的單元格,Selection則是選擇的單元格
4.數據類型
類型 |
值範圍 |
Byte/字節型 |
0 - 255 |
Integer(%)/整數型 |
-32,768 - 32,767 |
Long(&)/長整型 |
-2,147,483,648 - 2,147,483,648 |
Single(!)/單精度浮點型 |
-3.402823E+38 ~ -1.401298E-45 爲負值 |
Double(#)/雙精度浮點型 |
-1.79769313486232e+308 ~ -4.94065645841247E-324 爲負值 |
Currency(@)/貨幣類型 |
-922,337,203,685,477.5808 to 922,337,203,685,477.5807 |
Decimal/小數型 |
+/- 79,228,162,514,264,337,593,543,950,335 if no decimal is use |
類型 |
值範圍 |
String(fixed length) ($)/字符串型 |
1 ~ 65,400 字符 |
String(variable length) ($)/字符串型 |
0 ~ 20億個字符 |
Date/日期類型 |
1月 1, 100 到12月 31, 9999(2016-04-01) |
Boolean/布爾類型 |
True 或False |
Object/對象類型 worksheet workbook range |
任何嵌入對象 |
Variant(numeric)/變體型 |
任何Double值同樣大 |
Variant(text) )/變體型(arr) |
同爲可變長度的字符串 |
1.大數據在國際標準上是4v,也就是數量、多樣、價值、速度。
(1)數量就是數據體量特別大。
(2)多樣就是數據的種類和類型很是多,它包括網絡日誌、視頻、圖片、地理位置、信息、統計等等調查,這些全包括。
(3)深刻挖掘,就能產生出商業價值,換言之就是價值密度低,商業價值高。
(4)處理速度快。
2.大數據三原則
(1)首先大數據它不是隨機樣本,而是全體數據。
(2)大數據不是精確性的,而是混雜性。
(3)大數據彼此不是因果關係,而是相關關係。
3.數據特徵化
(1)數據特徵化是目標類數據的通常特徵或特徵的彙總。一般,經過查詢來收集對應於用戶指定類的數據。
(2)數據特徵化的輸出能夠用多種形式提供,例如餅圖、條圖、曲線、多維數據立方體和包括交叉表在內的多維表。結果描述也能夠用廣義關係或規則(稱作特徵規則)形式提供。
4.數據區分是將目標類數據對象的通常特性與一個或多個對比類對象的通常特徵進行比較。目標類和對比類能夠由用戶制定,而對應的數據對象能夠經過數據庫查詢檢索。
5.頻繁模式是在數據中頻繁出現的模式。存在多種類型的頻繁模式,包括頻繁項集、頻繁子序列(又稱序列模式)和頻繁子結構。
6.頻繁項集挖掘是頻繁模式挖掘的基礎。
7.離羣點數據分析稱作離羣點分析或異常挖掘。
8.數據質量涉及許多因素,包括準確性、完整性、一致性、時效性、可信性和可解釋性。
9.考察數據預處理的主要步驟,即數據清理、數據集成、數據規約和數據變換。
(1)數據清理例程經過填寫缺失的值,光華噪聲數據,識別或刪除離羣點,並解決不一致性來」清理」數據。
10.主成分分析(principal components analysis)或PCA(又稱Karhunen-Loeve或K-L方法)搜索k個最能表明數據的n維正交向量,其中k<=n,這樣,原數據投影到一個小得多的空間上,致使維規約。與屬性子集選擇經過保留屬性集的一個子集來減小屬性集的大小不一樣,PCA經過建立一個替換的、較小的變量」集合」屬性的基本要素。原數據能夠投影到該較小的集合中。PCA經常可以揭示先前不曾察覺的聯繫,並所以容許不尋常的結果。
11.PCA能夠用於有序和無序的屬性,而且能夠處理稀疏和傾斜數據。多於二維的多維數據能夠經過將問題歸約爲二維問題來處理。主成分能夠用作多元迴歸和聚類分析的輸入。與小波變換相比,PCA可以更好地處理稀疏數據,而小波變換更適合高維數據。
12.數據倉庫是一個面向主題的、集成的、時變的、非易失的數據集合,支持管理者的決策過程。
13.一般,數據倉庫採用三層體系結構:
(1)底層是倉庫數據庫服務器,它幾乎老是一個關係數據庫系統。
(2)中間層是OLAP服務器,其典型的實現使用(i)關係OLAP(ROLAP)模型(即擴充的關係DBMS,它將多維數據上的操做映射爲標準的關係操做),或使用(ii)多維OLAP(MOLAP)模型(即專門的服務器,它直接實現多維數據和操做)。
(3)頂層是前端客戶端,它包括查詢和報告工具、分析工具和或數據挖掘工具(例如,趨勢分析,預測等)。
14.多維數據分析的核心是有效地計算多維集合上的彙集。
15.置信區間是一個以給定的高几率涵蓋正真整體值估計的值域。
16.至少有4種方法能夠把OLAP風格的分析與數據挖掘技術融合在一塊兒。
(1)使用立方體空間爲數據挖掘定義數據空間。
(2)使用OLAP查詢爲挖掘產生特徵和目標。
(3)使用數據挖掘模型做爲多步挖掘過程的構建。
(4)使用數據立方體計算技術加快重複模型的構建。
17.通常而言,關聯規則的挖掘是一個兩步的過程:
(1)找出全部的頻繁項集:根據定義,這些項集的每個頻繁出現的次數至少與預約義的最小支持計算min_sup同樣。
(2)由頻繁項集產生強關聯規則:根據定義,這些規則必須知足最小支持度和最小置信度。
18.基於模式的多樣性,模式挖掘能夠使用以下標準進行分類:
(1)基本模式:頻繁模式可能有多種形式,包括簡單的頻繁模式、閉幕式和極大模式。
(2)基於模式所涉及的抽象層:模式或關聯規則可能具備處於高、低,或多個抽象層的項。
(3)基於規則或模式所涉及的維數:若是關聯規則或模式中的項或屬性只涉及一個維,則它是單維關聯規則/模式。
19.數據挖掘研究的通常線路圖
20.根據約束如何與模式挖掘過程配合,模式剪紙約束能夠分爲五類:(1)反單調的;(2)單調的;(3)簡潔的;(4)可轉變的(5)不可轉變的
21.模式融合合併大模式的小的子模式,而不是用單個項增量地擴展模式,所以,該方法有一個優勢,繞過中型模式,沿着通往可能的巨型模式的路徑前進。
22.分類是一種最重要的數據分析形式,它提取刻畫重要數據類的模型。這種模型稱爲分類器,預測分類的(離散的、無序的)類標號。
23.數據分類是一個兩階段過程,包括學習階段(構建分類模型)和分類階段(使用模型預測給定數據的類標號)。
24.聚類是一個把數據對象集劃分紅多個組或簇的過程,使得簇內的對象具備很高的類似性,但與其餘簇中的對象很不類似。
25.數據倉庫是一個從多個數據源收集的信息存儲庫,存放在一致的模式下,而且一般駐留在單個站點上。數據倉庫一般經過數據清理、數據變換、數據集成、數據裝入和按期數據刷新來構造。
(1)一般,數據倉庫用稱做數據立方體的多維數據結構建模。
26.數據特徵化是目標類數據的通常特徵或特徵的彙總。一般,經過查詢來收集對應於用戶指定類的數據。
27.數據區分是將目標類數據對象的通常特徵與一個或多個對比類對象的通常特徵進行比較。目標類和對對比類能夠由用戶指定,而對應的數據能夠經過數據庫查詢檢索。
28.分類預測類別(離散的,無序的)標號,而回歸創建連續值函數模型。也就是說,迴歸用來預測缺失的或難以得到的數值數據值,而不是(離散的)類標號。
29.離羣點數據分析稱做離羣點分析或異常挖掘。
30.做爲一個應用驅動的領域,數據挖掘吸納了諸如統計學、機器學習、模式識別、數據庫和數據倉庫、信息檢索、可視化、算法、高性能計算和許多應用領域的大量技術。
31.有效性、可伸縮性、性能、優化以及實時運行能力是驅動許多數據挖掘新算法開發的關鍵標準。
32.給定基本防踢,方體的物化有三種選擇:
(1)不物化(2)徹底物化(3)部分物化
33.聚類、決策樹和相關分析能夠用於數據離散
33.數據倉庫提供聯機分析處理(OLAP)工具,用於各類粒度的多維數據的交互分析,有利於有效的數據泛化和數據挖掘。OLAP工具一般使用數據立方體和多維數據模型,對彙總數據提供靈活的訪問。
34.大規模數據集下的一些重要的特徵抽取類型,它們包括如下兩種
(1)頻繁項集(2)類似項.
35.序列是事件的有序列表。根據事
件的特徵,序列數據能夠分層三類:(1)時間序列數據(2)符號序列數據(3)生物學序列法
36.序列分類方法能夠分紅三類:(1)基於特徵的分類,它們把序列轉換成特徵向量,而後使用傳統的分類方法;(2)基於序列距離的分類,其中度量序列之間類似性的距離函數決定分類的質量(3)基於模型的分類。
37.可視化數據挖掘包括數據可視化、數據挖掘結果可視化、數據挖掘過程可視化和交互的可視數據挖掘。
Sub 消息框彈出()
MsgBox "學習VBA"
MsgBox 12345
MsgBox prompt:="學習VBA", Buttons:=vbYesNo, _
Title:="數據分析"
MsgBox "學習VBA", vbYesNo, "數據分析"
MsgBox 56 * 2
End Sub
Sub 消息框彈出()
Const pi = 3.1415
'Dim a As Integer
a = 200
Debug.Print pi * a
End Sub
Sub 打開工做薄()
Dim wkb As Workbook
Set wkb = Workbooks.Open("C:\Users\lx\Desktop\新建 Microsoft Excel 工做表.xlsm")
End Sub
Sub range引用區域且有變量()
Dim i
i = 1
Range("a1:c" & i).Select '引用單元格是區域且有變量
Cells(i, "c").Select '引用的是單個單元格且有變量
[a1:a10].Select '引用的是區域或單元格且無變量
End Sub
2017年2月14日
表一、員工表employee的結構:
屬性含義 |
屬性名 |
數據類型 |
員工編號 |
employeeno |
char(8) |
員工姓名 |
employeename |
varchar(10) |
性別 |
sex |
char(1) |
出生日期 |
birthday |
datetime |
住址 |
address |
varchar(50) |
電話 |
telephone |
varchar(20) |
僱傭日期 |
hiredate |
datetime |
所屬部門 |
department |
varchar(30) |
職務 |
headship |
varchar(10) |
薪水 |
salary |
decimal(8,2) |
二、客戶表customer:
屬性含義 |
屬性名 |
數據類型 |
客戶號 |
customerNo |
char(9) |
客戶名稱 |
customerName |
varchar(40) |
客戶住址 |
address |
varchar(40) |
客戶電話 |
telephone |
varchar(20) |
郵政編碼 |
zip |
char(6) |
三、商品基本信息表product:
屬性含義 |
屬性名 |
數據類型 |
商品編號 |
productNo |
char(9) |
商品名稱 |
productName |
varchar(40) |
商品類型 |
productClass |
varchar(20) |
商品訂價 |
productProce |
decimal(8,2) |
四、訂單主表OrderMaster:
屬性含義 |
屬性名 |
數據類型 |
訂單編號 |
orderNo |
char(12) |
客戶號 |
customerNo |
char(9) |
員工編號 |
employeeNo |
char(8) |
訂單日期 |
orderDate |
datetime |
訂單金額 |
orderSum |
decimal(8,2) |
發票號碼 |
invoiceNo |
char(10) |
五、訂單明細表OrderDetail:
屬性含義 |
屬性名 |
數據類型 |
訂單編號 |
orderNo |
char(12) |
商品編號 |
productNo |
char(9) |
銷售數量 |
quantity |
int |
成交單價 |
price |
decimal(8,2) |
1、單表查詢
(1)查詢所有職工的基本信息
(2)查詢全部職工的部門、職工號、姓名和薪水
(3)查詢全體職工的姓名、年齡、所屬部門,並用漢語顯示錶頭信息
(4)查詢1973年出生且爲職員的員工信息
(5)查詢業務科或財務科的職工姓名、性別和所在部門,僅顯示前面5位職工
(6)查詢薪水爲2000或4000的職工編號、姓名、所在部門和薪水
(7)查詢薪水在3000~4000的職工姓名和薪水
(8)查詢薪水不在3000~4000的職工姓名和薪水
(9)查詢全部姓張的職工姓名、所屬部門和性別
(10)查詢全部姓張且全名爲三個漢字的職工姓名
(11)查詢既不在業務科也不在財務科的職工姓名、性別和所在部門
(12)查詢1991年被僱傭的職工號、姓名、性別、電話號碼、出生日期以及年齡
(13)查詢6月出生的員工編碼、姓名、出生日期,並按出生日期的降序輸出
(14)查詢職工工資最高的前10%的職工編號、職工姓名和工資
(15)查詢每一個業務員的訂單數量
(16)統計在業務科工做且在1973年或1967年出生的員工人數和平均工資
(17)統計每種商品的銷售數量和金額,並按銷售金額的升序排序輸出
(18)查詢訂單中至少包含3種(含3種)以上商品的訂單編號及訂購次數,且訂購的商品數量在3件(含3件)以上。
2、表連接
(1)查詢住址在上海的員工所作的訂單,結果輸出員工編號、姓名、訂單編號、客戶編號和訂單日期,並按客戶編號排序輸出。
(2)查找訂購了「32M DRAM」的商品的客戶編號、客戶名稱、訂單編號、定貨數量和定貨金額,並按客戶編號排序輸出。
(3)查詢與「張曉梅」在同一部門工做的員工姓名、所屬部門、性別和出生日期,並按所屬部門排序輸出
(4)查詢1973年出生的員工所訂購產品的訂單,輸出結果位員工編號、姓名、所屬部門、訂單編號、客戶名稱、訂單日期,按員工編號排序輸出。
(5)統計訂單中每一個商品具備銷售數量大於4的訂單的訂單個數,要求顯示商品編號、商品名稱、訂單數
(6)查詢每一個客戶訂購商品的具體訂單信息,輸出結果爲客戶編號、客戶名稱、商品編號、商品名稱、數量、單價和金額
(7)查詢「52倍速光驅」的銷售狀況,要求顯示相應的銷售員的姓名、性別、銷售日期、銷售數量和金額。
3、嵌套查詢
(1)查詢員工「張小娟」所作的訂單信息
(2)查詢沒有訂購商品的且在北京地區的客戶編號、客戶名稱和郵政編碼,並按郵政編碼降序排序
(3)查詢訂購了「32M DRAM」商品的訂單編號、定貨數量和定貨單價
(4)查詢與員工編號E2008005在同一部門的員工編號、姓名、性別、所屬部門
(5)查詢即訂購了P20050001商品,又訂購了P20070002商品的客戶編號、訂單編號和訂單金額。
(6)查詢沒有訂購「52倍速光驅」或「17寸顯示器」的客戶編號、客戶名稱。
(7)查找至少有2次銷售記錄的業務員名單和銷售日期
(8)查找銷售金額最大的客戶名稱和總訂單金額
(9)查找銷售總額少於5000元的銷售員編號、姓名和銷售額
(10)查找至少訂購了3種商品的客戶編號、客戶名稱、商品編號、商品名稱、數量和金額
(11)查找同時訂購了商品編號爲「P20070002」和商品編號爲「20070001」的商品的客戶
編號、客戶姓名、商品編號、商品名稱和銷售數量,按客戶編號排序輸出
4、存在量詞運算
(1)查詢訂購了「鍵盤」商品的客戶姓名、定貨數量和定貨日期
(2)查詢沒有訂購「鍵盤」商品的客戶名稱
(3)查詢至少銷售了5種商品的銷售員編號、姓名、商品名稱、數量及相應的單價,並按銷售員編號排序輸出
(4)查詢沒有訂購商品的客戶編號和客戶名稱
(5)查詢訂購了全部已列商品的客戶名稱
(6)查詢至少包含了「世界技術開發公司」所訂購的商品的客戶編號、客戶名稱、商品編號、商品名稱、數量和金額。
1、單表查詢
一、select * from employee;
二、
select employeeno,employeename,department,salary from employee;
三、
select employeename as 姓名,year(now())-year(birthday) as 年齡,
department 所屬部門 from employee;
四、
select * from employee
where year(birthday)='1973' and headship='職員';
五、
select employeename,sex,department from employee
where department regexp '財務科|業務科'
limit 0,5;
六、
select employeeno,employeename,department,salary
from employee
where salary='2000' or salary='4000';
七、
select employeename,salary from employee
where salary between 2000 and 4000;
八、
select employeename,salary from employee
where salary not between 2000 and 4000;
九、
select employeename,department,sex from employee
where employeename like '張%';
十、
select employeename from employee
where employeename like '張__';
若是上個不許用這個(個別電腦):
select employeename from employee
where employeename like '張%' and char_length(employeename)=char_length('張')*3;
十一、
select employeename,sex,department from employee
where department not regexp '財務科|業務科';
十二、
select employeeno,employeename,sex,telephone,
birthday,year(now())-year(birthday) as age from employee
where year(hiredate)='1991';
1三、
select employeeno,employeename,birthday
from employee
where month(birthday)=6
order by birthday desc;
1四、
delimiter //
create procedure pro2(in x int)
begin
create table employee1 as select * from employee order by salary desc;
alter table employee1 add num int unique auto_increment;
select employeeno,employeename,salary,num from employee1
where num<=round((select count(*) from employee1)*x/100);
drop table employee1;
end;
//
delimiter ;
1五、select employeeno,count(distinct orderno) from ordermaster
group by employeeno;
1六、
select count(*),avg(salary) from employee
where year(birthday) in (1973,1967) and department='業務科';
1七、
select orderdetail.productno,productname,quantity,quantity*price as 銷售金額
from orderdetail left join product on product.productno=orderdetail.productno
group by orderdetail.productno
order by 銷售金額 ;
1八、
select productno,group_concat(orderno) 訂單編號,
count(distinct orderno) as 訂購次數 from orderdetail
where orderno in(
select orderno from orderdetail
group by orderno
having count(productno)>=3)
and quantity>=3
group by productno;
2、連接查詢
一、
select employee.employeeno,employeename,orderno,
customerno,orderdate from employee left join ordermaster
on employee.employeeno=ordermaster.employeeno
where address regexp '上海'
order by customerno ;
二、
方法1: select p1.productno,productname,c1.customerno,
customername,o1.orderno,quantity,
quantity*price as 銷售金額 from customer as c1,product p1,ordermaster o1,orderdetail o2
where c1.customerno=o1.customerno and
o1.orderno=o2.orderno and
p1.productno=o2.productno
and productname='32m dram'
order by c1.customerno ;
方法2:
select p1.productno,productname,c1.customerno,
customername,o1.orderno,quantity,
quantity*price as 銷售金額 from customer as c1 inner join ordermaster o1 on c1.customerno=o1.customerno inner join orderdetail o2 on o1.orderno=o2.orderno
inner join product p1 on p1.productno=o2.productno
where productname='32m dram'
order by c1.customerno ;
三、查詢與「張曉梅」在同一部門工做的員工姓名、所屬部門、性別和出生日期,並按所屬部門排序輸出
select distinct e1.employeename,e1.department,e1.sex,e1.birthday
from employee e1 inner join employee e2 on e1.department=e2.department
where e2.employeename='張曉梅'
order by birthday;
四、
select e1.employeeno,employeename,department,o1.orderno,customername,
orderdate
from employee as e1,customer as c1,ordermaster as o1
where e1.employeeno=o1.employeeno and
c1.customerno=o1.customerno and
year(birthday)='1973'
order by e1.employeeno;
五、
select o1.productno,productname,
count(distinct orderno) as 訂單數 from orderdetail as o1,product as p1
where o1.productno=p1.productno
and quantity>4
group by o1.productno;
六、
select c1.customerno,customername,p1.productno,productname,
quantity,price,price*quantity 金額
from customer c1,product p1,ordermaster o1,orderdetail o2
where c1.customerno=o1.customerno and
p1.productno=o2.productno and
o1.orderno=o2.orderno;
七、
select employeename,sex,orderdate,quantity,quantity*price
from employee e1,ordermaster o1,orderdetail o2
where e1.employeeno=o1.employeeno and
o1.orderno=o2.orderno and
o2.productno=(select productno from product where productname='52倍速光驅');
三:嵌套查詢
一、
select * from ordermaster
where employeeno=(select employeeno from employee where employeename='張曉娟');
二、
select customerno,customername,zip from customer
where customerno not in
(select distinct customerno from ordermaster )
order by zip ;
三、
select productno, orderno,quantity,price from orderdetail
where productno =(select productno from product where productname='32M DRAM');
四、
select employeeno,employeename,sex,department from employee
where department=(select department from employee where employeeno='E2008005');
五、
select customerno,orderno,ordersum from ordermaster
where customerno in(
select customerno from ordermaster
where orderno in (select orderno from orderdetail where productno='P20050001') )and customerno in(
select customerno from ordermaster
where orderno in (select orderno from orderdetail where productno='P20070002'))
;
六、
select customerno,customername from customer
where customerno not in(
select customerno from ordermaster
where orderno in(select orderno from orderdetail
where productno in(select productno from product
where productname in('52倍速光驅','17寸顯示器'))));
七、
select employeeno,orderno,orderdate from ordermaster
where employeeno in(select employeeno from ordermaster
group by employeeno
having count(orderno)>=2);
八、
select f1.customerno ,c1.customername,max(銷售額) as 總訂單金額
from ( select customerno,sum(ordersum)as 銷售額 from ordermaster
group by customerno) as f1 inner join customer as c1
on f1.customerno=c1.customerno;
九、
select f1.employeeno,employeename,銷售額 from
(select employeeno,sum(ordersum) as 銷售額 from ordermaster
group by employeeno
having 銷售額<5000) as f1 inner join employee
on f1.employeeno=employee.employeeno;
十、
select c1.customerno,customername,p1.productno,productname,
quantity,quantity*price 金額 from customer c1,product p1,
ordermaster o1,orderdetail o2
where c1.customerno in(select o1.customerno from ordermaster o1 inner join orderdetail o2 on o1.orderno=o2.orderno
group by o1.customerno
having count(productno)>=3)
and c1.customerno=o1.customerno and
p1.productno=o2.productno and
o1.orderno=o2.orderno;
十一、
select c1.customerno,customername,p1.productno,productname,quantity
from ordermaster o1,product p1,orderdetail o2,customer c1
where c1.customerno in(
select customerno from ordermaster
where orderno in (select orderno from orderdetail where productno='P20070001') )and c1.customerno in(
select customerno from ordermaster
where orderno in (select orderno from orderdetail where productno='P20070002'))
and c1.customerno=o1.customerno and
p1.productno=o2.productno and
o1.orderno=o2.orderno and p1.productno in('P20070001','P20070002')
order by c1.customerno;
4、
一、
select customername,productname,quantity,orderdate from customer c1,
ordermaster o1,orderdetail o2,product p1
where exists(select productno from product
where productname='鍵盤' and productno=o2.productno) and
c1.customerno=o1.customerno and
o1.orderno=o2.orderno and p1.productno=o2.productno;
二、
select customername from customer
where not exists(
select c1.customerno, customername,productname,quantity,orderdate from customer c1,
ordermaster o1,orderdetail o2,product p1
where exists(select productno from product
where productname='鍵盤' and o2.productno=productno) and
c1.customerno=o1.customerno and
o1.orderno=o2.orderno and p1.productno=o2.productno
and c1.customerno=customer.customerno);
三、
select * from
(select e1.employeeno,employeename,productname,quantity,price from
employee e1,product p1,orderdetail o2,ordermaster o1
where exists(select employeeno from ordermaster or1,orderdetail o2
where or1.orderno=o2.orderno
group by or1.employeeno
having count(productno)>=5 and employeeno=e1.employeeno)
and e1.employeeno=o1.employeeno and
p1.productno=o2.productno and
o1.orderno=o2.orderno) as f1
order by employeeno;
四、
select customerno,customername from customer
where not exists (select customerno from ordermaster
where customerno=customer.customerno);
五、
select customername from customer
where exists(
select customerno,count(distinct productno) from ordermaster o1,orderdetail o2
where o1.orderno=o2.orderno
group by customerno
having count(distinct productno)=(select count(distinct productno) from product))
and customerno=customer.customerno;
六、
例1:查詢「世界技術開發公司」所訂購的商品的客戶編號、客戶名稱、商品編號、商品名稱、數量和金額。
select o1.customerNo,customerName,o2.productNo,p1.productName,
o2.quantity,price*quantity from customer c1,ordermaster o1,
orderdetail o2,product p1
where o1.customerno=c1.customerno and o2.orderno=o1.orderno
and p1.productNo=o2.productNo AND
exists(
select distinct productno from ordermaster o1 inner join orderdetail o2
on o1.orderno=o2.orderNo
where exists
( select customerno from customer
where customername='世界技術開發公司' AND
customerno=o1.customerNo) and
productno=o2.productno);
例2:查詢至少包含了「世界技術開發公司」所訂購的商品的客戶所訂購商品的客戶編號、客戶名稱、商品編號、商品名稱、數量和金額。
select o1.customerNo,customerName,o2.productNo,p1.productName,
o2.quantity,price*quantity from customer c1,ordermaster o1,
orderdetail o2,product p1
where o1.customerno=c1.customerno and o2.orderno=o1.orderno
and p1.productNo=o2.productNo AND
exists(
select distinct productno from ordermaster o1 inner join orderdetail o2
on o1.orderno=o2.orderNo
where exists
( select customerno from customer
where customername='世界技術開發公司' AND
customerno=o1.customerNo) and
productno=o2.productno)
group by customerNo
having count(*)>=(select count(distinct productno) from ordermaster o1 inner join orderdetail o2
on o1.orderno=o2.orderNo
where exists
( select customerno from customer
where customername='世界技術開發公司' AND
customerno=o1.customerNo));
1.代碼編寫規則
'1.VBE常見的設置
'A.工具選項設置
'B.註釋
'C.代碼的運行
'D.代碼幫助(F1)
'2.代碼的編寫規則
'A.子過程
'B.函數過程
'3.代碼換行 (空格+下劃線+換行)
Sub aa()
MsgBox prompt:="學習VBA", Buttons:=vbYesNo + vbInformation, Title:="vba"
MsgBox 56 * 9
MsgBox _
"學習VBA"
End Sub
2.工做薄
Sub 當前與活動工做薄區別實例()
MsgBox ThisWorkbook.Name & " --------" & ActiveWorkbook.Name
End Sub
Sub 打開工做薄()
Dim wkb As Workbook
Set wkb = Workbooks.Open("C:\Users\lx\Desktop\新建 Microsoft Excel 工做表.xlsm")
End Sub
3.工做表示表的b表示方法
'在workbook對象中,有一個SHEETS集合,其成員是worksheet對象或chart對象。
'worksheets僅指的是工做表,而sheets包含圖表,工做表,宏表等等
'VBA中,常常在工做表之間轉換或者對不一樣工做表中的單元格區域進行操做.
'一般有下面幾種方法:
Sub 直接使用工做表名稱法()
MsgBox Worksheets("個人工做表").Name
MsgBox Sheets("個人圖表").Name
End Sub
Sub 索引號表示法()
MsgBox Worksheets(1).Name
End Sub
Sub 工做表代碼索引號表示法()
MsgBox Sheets(1).Name
End Sub
Sub 直接取工做代碼法()
MsgBox Sheet1.Name
End Sub
Sub 活動工做表()
MsgBox ActiveSheet.Name
End Sub
'注意:當工做簿包括工做表、宏表、圖表等時,
' 使用索引號引用工做表如Sheets(1)與
' WorkSheets(1)引用的可能不是同一個表。
Sub worksheetss()
MsgBox Worksheets(1).Name
MsgBox Sheets(1).Name
End Sub
4.
Sub Beee()
Cells(2, 2).Select
Range("b2").Select
[B2].Select
End Sub
Sub F6()
Range("F6,F6").Select
[B2].Offset(4, 4).Select
[B2].Cells(5, 6).Select
End Sub
Sub B2F6()
Range(Cells(2, 2), Cells(6, 6)).Value = 10
Range("b2:f6").Select
Range("b2", "f6").Select
[b2:f6].Select
Range("b2").Resize(5, 6).Select
[b2:f6] = 1
Sheet1.Range("b2:f6").Copy Sheet2.[a1]
End Sub
Sub 動態變量()
Dim a%, b%
a = Application.CountA(Range("b:b"))
b = Application.CountA(Range("2:2"))
Range("f" & b + 1).Select
Range(Cells(2, 2), Cells(a + 1, b + 1)).Select
[B2].Cells(a, b).Select
End Sub
注意:Sub 名稱切記不用用B2等,這些容易與單元格計算容易混淆[B2].Cells(a,b).Select 運行不了。
CountA() 計算非空單元格
5.建立和刪除工做表
Sub 批量新建工做表()
Dim i%, sth As Worksheet
For i = 1 To 12
Set sth = Sheets.Add
sth.Move after:=Sheets(Sheets.Count)
sth.Name = i & "月"
Next
End Sub
'刪除工做表
Sub 刪除sheet()
On Error Resume Next
Application.DisplayAlerts = False
Dim i%
For i = 1 To 12
Sheets(i & "月").Delete
Next
Application.DisplayAlerts = True
End Sub
'在操做EXCEL時,常常會彈出提示,如刪除工做表時會提示,合併單元格時會提示,
'若是在VBA中想屏它,就在開始加上Application.DisplayAlerts = False,若是須要在結尾處要恢復顯示 Application.DisplayAlerts = True
6.賦值和移動工做表
'表達式.Move(Before, After)
'表達式.copy(Before, After)
Sub 移動()
Sheets(1).Move , Sheets(3)
End Sub
Sub 複製()
Sheet1.Copy Sheets(Sheets.Count)
End Sub
7.Range的用法
'----------------------------------------------------
'單元格對象在VBA中一個很是基礎,同時也很重要的。
'它的表達方式也是很是的多樣化。
'----------------------------------------------------
'Range 對象
'表明某一單元格、某一行、某一列、某一選定區域(該區域可包含一個或若干連續單元格區域),或者某一三維區域。
'Range ("文本型裝單元格地址")
'range的常見寫法
Sub rng()
Range("a1").Select '單元格
Range("a:a").Select '列
Range("1:3").Select '行
Range("a1:b10").Select '相鄰區域
Range("a1:d7,c4:e8").Select '不相個鄰區域
End Sub
2017年2月15日
1.cells單元格引用法
'寫法:cells(行號,列號)
Sub cells基本寫法()
Cells(3, 4).Select '行列號均爲數字
Cells(2, "c").Select '行爲數字,列爲列標字母
Cells.Select '全選
End Sub
'cells能夠像range同樣能夠參照前面的單元格位置
Sub 參照寫法()
Range("b3:f11").Cells(2, 2).Select
Range("b3:f11").Cells(6).Select '從左到右,從上到下
Range("b3:f11")(6).Select '與上一句相等
End Sub
'注意:
'1.cells中的數字同樣支持正數,負數,0值,小數(四捨六入五單雙)
'2.cells不能像range同樣能夠引用一個區域,只能引用一個單元格
'cells還能夠嵌套在range中
Sub 嵌套()
Range(Range("b1"), Range("f11")).Select '這種嵌套方法寫變量比較麻煩
Range(Cells(3, 2), Cells(11, 6)).Select '這種嵌套方法寫變量比較方便
End Sub
Sub 動態引用行列區域()
Dim a%, b%
a = Application.CountA(Range("a:a"))
b = Application.CountA(Range("1:1"))
Range(Cells(1, 1), Cells(a, b)).Select
End Sub
2.單元格簡寫
'除了前面講的range\cells單元格區域的表示方法還,仍是一種簡單的寫法
'寫法: [單元格地址] '注意:中括號中的單元格地址並不須要雙引號("")
Sub 單元格簡寫()
[a3].Select ' 單元格引用
[b2:c6].Select '單元格區域引用
[a3,b2:c6,b8:d12].Select '多區域引用
[a:a].Select '整列引用
[1:1].Select '整行引用
End Sub
'單元格簡寫的也支持引用子集
Sub 子集引用()
[b2:c6].Item(3).Select
Range("b2:c6")(3).Select
[b2:c6].Cells(4).Select
End Sub
Sub 動態區域的引用()
a = Application.CountA([a:a])
b = Application.CountA([1:1])
Range(Range("a1"), Range(Chr(64 + b) & a)).Select '利用chr函數,讓字母形式的列號也支持變量
End Sub
Sub chr函數字符循環()
For i = 1 To 65535
Cells(i, 1) = i
Cells(i, 2) = Chr(i)
Next
End Sub
3.三種單元格引用小結
Sub range引用區域且有變量()
Dim i
i = 1
Range("a1:c" & i).Select '引用單元格是區域且有變量
Cells(i, "c").Select '引用的是單個單元格且有變量
[a1:19].Select '引用的是區域或單元格且無變量
End Sub
4.行列引用
'行列引用
Sub 列引用()
Columns(1).Select
Columns("b").Select
Columns("c:e").Select
End Sub
Sub 行引用()
Rows(1).Select
Rows("2").Select
Rows("3:4").Select
End Sub
Sub range行列表式法()
Range("1:1").Select
Range("2:4").Select
Range("a:a").Select
Range("b:d").Select
End Sub
Sub 簡寫法()
[a:a].Select
[b:d].Select
[1:1].Select
[2:4].Select
End Sub
Sub 全選()
Rows.Select '選擇全部行
Columns.Select '選擇全部列
Cells.Select '選擇所單元格
i = Rows.Count
j = Columns.Count
k = Cells.Count
End Sub
Sub 動態引用使用區域()
a = Application.CountA(Columns(1))
b = Application.CountA(Rows(1))
Range("a1", Cells(a, b)).Select
End Sub
5.
6.Range.Row 與Range.Column屬性
'-------------------------------------------------
'Range.Row 屬性
'返回區域中第一個子區域的第一行的行號
'Range.Column 屬性
'返回指定區域中第一塊中的第一列的列號
'-------------------------------------------------
Sub test()
i = Range("a3:b9").Range("a5").Row
j = Range("a3:b9").Row
i = Range("b3:d9").Range("a5").Column
j = Range("b3:d9").Column
End Sub
Sub row應用()
For Each rw In Rows("1:13")
If rw.Row Mod 2 = 0 Then
rw.RowHeight = 5
End If
Next rw
End Sub
2017年2月16日
1.屬性
'VBA屬性: 指對象所具備的特性
'人的屬性:姓名,年齡,身份證號,住址….
Sub 屬性()
Debug.Print Sheet1.Name
Debug.Print Sheet1.Range("a1").Value
End Sub
'VBA對象屬性的賦值
Sub 屬性賦值()
Sheet2.Name = "改變本身"
Sheet2.Range("a1") = "學習VBA"
End Sub
Sub 常見屬性()
MsgBox Application.Name
MsgBox ThisWorkbook.Path
MsgBox Worksheets(1).Name
MsgBox ActiveCell.Height
MsgBox ActiveCell.Value
End Sub
2.活動單元格
'活動單元格:activecell,工做表中活動單元格只有一個
Sub activecells()
a = ActiveCell.Address '取得活動單元格地址
Cells(2, 3).Activate '激活指定單元格
End Sub
'selection光標所選區域
Sub 光標所選區域()
Selection = 2
End Sub
'Range.CurrentRegion 屬性
'返回一個 Range 對象,該對象表示當前區域。
Sub 當前區域()
[a1].CurrentRegion.Select
[f8].CurrentRegion.Select
End Sub
'usedrange與currentregion
'若是表中只有一個區域,二者最後的結果是同樣的
'只是表達方式不同
Sub u與c()
Sheet3.UsedRange.Select
[a1].CurrentRegion.Select
End Sub
Sub currentregion應用()
Rows(8).Clear
a = [b2].CurrentRegion.Address
b = [b5].CurrentRegion.Address
c = [b2].CurrentRegion.Count + 1
Set c = Range("b8", Cells(8, c))
c.FormulaArray = "=" & a & "+" & b
End Sub
3.Range.offset屬性
'Range.Offset 屬性
'返回 Range 對象,它表明位於指定單元格區域的必定的偏移量位置上的區域。
'表達式.Offset(偏移行, 偏移列)
'表達式 一個表明 Range 對象的變量。
'偏移行列的數字能夠是:正數,負數,零值
Sub test()
[a1].Offset(1, 2).Select '行列都偏移
[a1].Offset(2).Select '只偏移行
[a1].Offset(, 2).Select '只偏移列
'若是offset前面的range對象是一個區域,則偏移後也結果尺寸不變
[a1:d1].Offset(1, 2).Select
[a1:d1].Offset(2).Select
[a1:d1].Offset(, 2).Select
End Sub
4.Range.Resize屬性
'Range.Resize 屬性
'調整指定區域的大小。返回 Range 對象,該對象表明調整後的區域。
'語法
'表達式.Resize(行數, 列數)
'表達式 一個返回 Range 對象的表達式。
Sub test()
[a1].Resize(2, 3).Select
[a1].Resize(2).Select
[a1].Resize(, 3).Select
End Sub
Sub 保存()
Dim i%, j%, k%
i = [a1].CurrentRegion.Rows.Count - 1
j = [a1].CurrentRegion.Columns.Count
k = Application.CountA(Sheet2.Columns(1))
[a2].Resize(i, j).Copy Sheet2.[a1].Offset(k)
End Sub
5.方向鍵(Range.End)
'====================================================================================
'1.從錄製一個宏開始。操做:(ctrl+向上鍵、ctrl+向下鍵、ctrl+向左鍵、ctrl+向右鍵)
'2.看代碼
'Range.End 屬性
'返回一個 Range 對象,該對象表明包含源區域的區域尾端的單元格。
'等同於按鍵 (End+向上鍵、End+向下鍵、End+向左鍵、End+向右鍵)
'語法
'表達式.End (Direction)
'表達式 一個表明 Range 對象的變量。
'方向 寫法 值
'向上 xlUp - 4162
'向下 xlDown - 4121
'向左 xlToLeft - 4159
'向右 xlToRight - 4161
'========================================================================================
'←爲1,→爲2,↑爲3,↓爲4
Sub test()
i = Cells(Rows.Count, 3).End(xlUp).Row
j = Cells(Rows.Count, 3).End(xlUp).Address
Range("a1", j).Select
Range("a1", Cells(i, 3)).Select
Range("a1:c" & i).Select
Range("a1", "c" & i).Select
End Sub
6.單元格的值
'單元格的值表示方法
Sub 單元格值表示()
a = [a1].Value '實際是什麼,就是什麼
b = [a1].Text '看到是什麼,就是什麼
c = [a1]
End Sub
'注意:一個單元格能夠省略value,多單元格區域不能省略
Sub 多區域賦值()
Range("e1:e4") = Range("d1:d4").Value
End Sub
'單元格地址與引用
Sub 地址與引用()
Set rng = [b2:f2]
[a9] = rng.Address(1, 1) '絕對引用
[b9] = rng.Address(0, 0) '相對引用
[c9] = rng.Address(1, 0) '混合引用
[d9] = rng.Address(0, 1) '混合引用
End Sub
'總結:1表明固定,0表明不固定,默認是絕對引用
Sub 地址引用實例()
'將表三成績中爲空的單元格標爲未考
Dim rng As Range, rn$
On Error Resume Next
For Each rng In Sheet3.Range("b2:d10")
If rng = "" Then rn = rn & rng.Address & ","
Next
Range(Left(rn, Len(rn) - 1)) = "未考"
End Sub
'思考題:用上題的思路,將成績中的"未考"去掉爲空?
注:""與「 」的區別
7.方法
'方法:實際上就是對對象的操做,它是一種動做,一種行爲。
Sub 選擇方法()
Range("a1:a10").Select
'注:若是單元格區域前沒有寫工做表名,則默認爲活動工做表
End Sub
Sub 複製方法()
Sheet1.Range("a1:a10") = 1 '將1寫入表一的a1:a10區域
Sheet1.Range("a1:a10").Copy Sheet2.Range("a1") '將表一的a1:a10區域的值複製到表2的a1
End Sub
Sub 刪除方法()
Sheets(3).Delete
End Sub
8.觸發事件
'下面是能夠由用戶添加的支持工做薄的事件
'Private Sub Workbook_AddinUninstall()
'Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Private Sub Workbook_Deactivate()
'Private Sub Workbook_NewSheet(ByVal Sh As Object)
'Private Sub Workbook_Open()
'Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
'Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
'Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Private Sub Workbook_WindowActivate(ByVal Wn As Window)
'Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
'Private Sub Workbook_WindowResize(ByVal Wn As Window)
Private Sub Workbook_Activate()
End Sub
Private Sub Workbook_NewSheet(ByVal Sh As Object)
MsgBox "新建工做表"
End Sub
Private Sub Workbook_Open()
MsgBox "歡迎"
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
End Sub
注:名稱也就是觸發事件,觸發事件就是vba自帶的
9.動態選單元格
Sub 實例1動態選單元格或區域()
Dim i%
i = Application.CountA(Range("c:c")) '找到c列中已使用的最後一個單元格位置
Range("c" & i).Select '選擇C列最後一格
Range("a1", "c" & i).Select '選擇A1到C列的最後一格(方法一)
Range("a1:c" & i).Select '選擇A1到C列的最後一格(方法二)
'小結:動態單元格區域的定位,能夠應用到單據的保存等實際工做中
j = Application.ActiveSheet.Name 'Application對象是Excel對象模型中最高層級的對象,表明Excel應用程序自身,也包含組成工做簿的許多部分,包括工做簿、工做表、單元格集合以及它們包含的數據
End Sub
'除了上一課節講的range基本表示方法外,還有更多的變化寫法
'1.range("地址區域").range("地址區域")
Sub 序號表示法()
Range("b2:d4").Range("b2").Select '相對引用的寫法
'參照前一個range的左上單元格
End Sub
'2.range地址區域中支持變量
Sub range的變量支持()
Dim a%
a = 3
Range("a" & a).Select
Range("c3:e5")(2).Select
End Sub
10.讀出聲音
Sub 讀出聲音()
Application.Speech.Speak Now
[a2:b5].Speak , True
End Sub
11.常量與變量
'1.常量:常量是定義了以後就不作變化了。
' 常量定義格式:Const 常量名= 常量表達式
Sub 常量()
Const pi = 3.145926
End Sub
'2.變量:在定義以後還能再次賦值
'變量定義格式:Dim 變量 As 變量類型
Sub 變量()
Dim a As Integer
a = 100
End Sub
'3.常量變量應用
Sub 應用()
Const pi = 3.1415926
Dim a As Integer
a = 200
Debug.Print pi * a
End Sub
'3.A容許使用未定義的變量,默認是變體變量(Variant)
'B.變量的強制聲明:Option Explicit
'4.變量名的命名規則
'以字母開頭
'不能用保留字
'不超過 255 個字符。
'同一範圍內必須是惟一
12.數據類型
13.IF條件判斷
'VBA中的IF條件判斷語句,就像函數中的IF同樣
'IF可單條件,也可多條件。
Sub IF條件判斷之單條件1()
Dim a%, b%
a = 2
b = 2
If a = b Then MsgBox "相等"
End Sub
Sub IF條件判斷之單條件2()
Dim a%, b%
a = 2
b = 2
If a = b Then
MsgBox "相等"
End If
End Sub
Sub IF條件判斷之單條件3()
Dim a%, b%
a = 2
b = 2
If a = b Then
MsgBox "相等"
Else
MsgBox "不相等"
End If
End Sub
'Go to 就是去到哪兒的意思。Go to 語句是將程序轉到指定的標籤的語句位置,而後繼續往下執行
Sub goto語句()
Dim a%, b%
a = 3
b = 2
If a = b Then
MsgBox "相等"
Else
GoTo xy '爲go to 語句設置的標籤,必須以英文狀態下的冒號結尾
End If
xy: MsgBox "不相等"
End Sub
Sub IF條件判斷之多條件等級劃分()
If Sheet1.Range("b1") >= 90 Then
Sheet1.Range("b2") = "優秀"
ElseIf Sheet1.Range("b1") >= 80 Then
Sheet1.Range("b2") = "良好"
ElseIf Sheet1.Range("b1") >= 60 Then
Sheet1.Range("b2") = "中等"
Else
Sheet1.Range("b2") = "較差"
End If
End Sub
'VBA中的IIF函數與工做表函數(IF)的語法結一致
Sub IIF函數應用()
Cells(2, 3) = IIf(Cells(1, 2) > 80, "優秀", "不優秀")
End Sub
Sub IF條件判斷之多條件等級劃分11()
If Sheet1.Range("b1") < 60 Then
Sheet1.Range("b2") = "較差"
ElseIf Sheet1.Range("b1") < 80 Then
Sheet1.Range("b2") = "中等"
ElseIf Sheet1.Range("b1") < 90 Then
Sheet1.Range("b2") = "良好"
Else
Sheet1.Range("b2") = "優秀"
End If
End Sub
Sub IF條件判斷之多條件等級劃分1()
If Sheet1.Range("b1") > 100 Then
Sheet1.Range("b2") = "溢出"
ElseIf Sheet1.Range("b1") >= 90 Then
Sheet1.Range("b2") = "優秀"
ElseIf Sheet1.Range("b1") >= 80 Then
Sheet1.Range("b2") = "良好"
ElseIf Sheet1.Range("b1") >= 60 Then
Sheet1.Range("b2") = "中等"
Else
Sheet1.Range("b2") = "較差"
End If
End Sub
Sub IF條件判斷之多條件等級劃分2()
If Range("b1") < 60 Then
Range("b2") = "較差"
ElseIf Range("b1") >= 60 And Range("b1") < 80 Then
Range("b2") = "中等"
ElseIf Sheet1.Range("b1") >= 80 And Range("b1") < 90 Then
Range("b2") = "良好"
ElseIf Sheet1.Range("b1") >= 90 And Range("b1") <= 100 Then
Range("b2") = "優秀"
Else
Range("b2") = "溢出"
End If
End Sub
14.select case
'select case語句:根據表達式的值來決定執行幾組語句中的其中之一。
'vba if語句爲判斷語句。根據條件的值,可以使用 If...Then...Else 語句運行指定的語句或一個語句塊。If...Then...Else 語句可根據須要嵌套多級。
'
' 可是,爲了代碼的可讀性,建議使用其他的語句,好比 Select Case 語句而不使用多層嵌套的vba中的 If...Then...Else 語句。
Sub select單條件判斷()
i = 2
Select Case i
Case Is > 0 ' Is 是關鍵字
MsgBox "正數"
Case Else
MsgBox "負數"
End Select
End Sub
Sub select多條件判斷()
Select Case Sheet1.[b1].Value
Case 90 To 100
Sheet1.[b2] = "優秀"
Case 80 To 89
Sheet1.[b2] = "良好"
Case 60 To 79
Sheet1.[b2] = "中等"
Case 0 To 59
Sheet1.[b2] = "較差"
Case Else
Sheet1.[b2] = "溢出"
End Select
End Sub
15.for each ...each
'當須要處理集合成員時,通常會用for each..next,實際上就是處理對象
Sub foreachnext循環1()
Dim rng As Range
For Each rng In Sheet1.Range("a2:a10") '取a2:a10中的每一個單元格
If rng = "A1" Then rng.Interior.ColorIndex = 3
Next
End Sub
Sub for循環()
Dim i%
For i = 2 To 10
If Cells(i, 1) = "A1" Then
Cells(i, 1).Interior.ColorIndex = 3
End If
Next
End Sub
Sub foreachnext循環2()
Dim wsh As Worksheet, n As Byte, m As String
For Each wsh In Worksheets '取當前工做表集合中的每一個成員
n = n + 1
Sheet1.Cells(n, 3) = wsh.Name
Next
End Sub
16.for next 循環
'FOR...NEXT也是循環語句,for next有一個內置計數器
Sub fornext循環1()
Dim i%, j%
For i = 1 To 100 Step 2
j = j + i
Next
MsgBox j
End Sub
Sub fornext循環2()
Dim i!, j!
For i = 100 To 1 Step -2
j = j + i
Next
MsgBox j
End Sub
Sub fornext循環()
Dim rng!
For rng = 2 To 16
Sheet1.Cells(rng, 4) = Sheet1.Cells(rng, 2) * Sheet1.Cells(rng, 3)
Next
End Sub
'能夠將一個 For...Next 循環放置在另外一個 For...Next 循環中,組成嵌套循環。
' For I = 1 To 10
' For J = 1 To 10
' For K = 1 To 10
' ...
' Next K
' Next J
' Next I
Sub 理解計數變量的運行()
For i = 1 To 2
For j = 1 To 3
k = "外層的第" & i & "次的,內層的第" & j & "次"
Next j
Next i
End Sub
17.do...loop
'----------------------------------------------------------
'do ...loop 循環語句,直到知足某個條件
'----------------------------------------------------------
Sub test()
Dim a%
Do
a = a + 1
If a > 10 Then
MsgBox a & "終於大於10"
Exit Do
End If
Loop
End Sub
Sub 基本示例()
Dim rs%
rs = 1
Do
rs = rs + 1
If rs > 10 Then
Exit Sub
Else
If Cells(rs, 2) >= 90 Then Cells(rs, 3) = "√"
End If
Loop
End Sub
18.while until 與Do的使用
'---------------------------------------------------------------
'while與until不但能夠放在DO後面,也能夠放在LOOP後面
'事實上有時在循環的最後一行進行判斷,更具備意義
'---------------------------------------------------------------
Sub doloop的前面判斷循環()
Dim pss$
Do Until pss = "123" 'until放在前面須要作兩次判斷
pss = InputBox("請輸入密碼")
Loop
End Sub
Sub doloop的最後判斷循環()
Dim pss$
Do
pss = InputBox("請輸入密碼")
Loop Until pss = "123"
End Sub
'若是沒有判斷正確,永遠沒法退出循環
'若是三次沒有正確錄入,就退出循環
Sub doloop的最後判斷循環2()
Dim pss$, i%
Do
i = i + 1
If i > 3 Then Exit Do
pss = InputBox("請輸入密碼,第" & i & "次輸入")
Loop Until pss = "123"
End Sub
'用Do…Loop循環要注意的幾點:
'1. While與Until是放在Do後面仍是Loop後面,取決因而先判斷再循環,仍是先循環再判斷前者則在Do後面。,後者則在Loop後面。
'2. 能夠在Do...Loop中的任何位置放置任意個數的 Exit Do 語句,隨時跳出 Do...Loop 循環。
'3. Do...Loop + If...Then + Exit Do 一般結合使用.
'4. 若是 Exit Do 使用在嵌套的 Do...Loop 語句中,則 Exit Do 會將控制權轉移到 Exit Do 所在位置的外層循環。
2017年2月17日
1.OTS構建在阿里雲飛天分佈式系統之上的NoSQL數據庫服務,提供海量結構化數據的存儲和實時訪問。
2.數組的概念
' 1.數組概念
' 數組就是一個列表或者一組數據表.
'
' 2.數組位置
' 數組存儲在內存中.
'
' 3.數組特色
' a.讀寫速度快(從內存讀取數據要比從硬盤讀取快)
' b.沒法永遠保存(內存只是暫存空間)
' 4.數組分類
' a.通常分爲:常量數組,靜態數組,動態數組
' b.如按維度爲:1維,2維,3維......60 維
'
'
Sub test2()
Dim arr1(3)
Dim arr2(1 To 3)
Dim arr3(1 To 3, 1 To 2)
Dim arr4(3, 2)
End Sub
3.多維數組
' 數組最多有60維,但在excel中通常最到2維
' 1.excel中的一行或一列能夠轉換1維數組
' 2.excel中的多行多列能夠轉換成2維數組
'
Sub test1()
arr1 = [{"A","B","C","D"}] '橫向逗號
arr2 = Application.WorksheetFunction.Transpose([{1;2;3;4}]) '豎向分號
End Sub
Sub test2()
arr3 = [{"張",1;"王",2;"陳",3;"李",4;"林",5}]
arr4 = Range("i1:j5")
End Sub
Sub test4()
4.數組寫入數據
Sub 向數組中指定的位置寫入數據()
Dim arr(1 To 9)
arr(3) = "我"
arr(5) = "是"
arr(7) = "誰"
End Sub
Sub 循環向數組中寫入數據()
Dim arr(1 To 4)
For Each Rng In [a1:a4]
n = n + 1
arr(n) = Rng
Next
End Sub
Sub 常量數組數據寫入通常數組()
Dim arr() '聲明時括號內沒有賦值,造成動態數組
arr = Array("V", "B", "A", 9)
End Sub
arr = Array(1, 2, 3, 4)
arr1 = Array(Array("a", "b"), Array(1, 2, 3))
End Sub
Sub 單元格區域數據批量寫入數組()
arr = Application.Transpose([a1:a4]) '注意:當向數組中批量寫入多行,結果就是二維數組
arr1 = Application.Transpose(Application.Transpose([a7:d7]))
End Sub
5.數組取數
'怎樣在數組中取數
Sub 取數組中指定位置的元素()
arr = [a2:a5]
'MsgBox arr(2, 1)
'MsgBox arr(4, 1)
i = UBound(arr, 2) '上標
j = LBound(arr, 2) '下標
End Sub
Sub 方法1循環取數()
arr = [a2:a9]
[b1] = arr(2, 1)
For i = 1 To 8
Cells(i, 3) = arr(i, 1)
Next
End Sub
Sub 方法2一次性取數()
arr = [a2:a5]
Range("d1:d" & 4) = arr
End Sub
Sub 用transpose函數轉置()
arr = [a2:a5]
arr1 = Application.Transpose(arr)
[a7:d7] = arr1
[a8:c8] = arr1
[a9:e9] = arr1
'注意左右兩邊尺寸的對應
End Sub
6.數組
Sub 數組彙總() '求平均分
arr = [b2:b9]
For Each num In arr
n = n + 1 '計數
lj = lj + num '累加求和
Next
MsgBox "平均分爲:" & lj / n
End Sub
Sub 動態區域數組彙總() '求平均分
arr = Range([b2], Cells(Rows.Count, 2).End(xlUp))
For Each num In arr
n = n + 1
lj = lj + num
Next
MsgBox "平均分爲:" & lj / n
End Sub
Sub 動態區域數組彙總分拆() '求平均分
Dim m$
m = Cells(Rows.Count, 2).End(xlUp).Address
arr = Range([b2], m)
For Each num In arr
n = n + 1
lj = lj + num
Next
MsgBox "平均分爲:" & lj / n
End Sub
7.數組中的函數
'在數組中求和,平均,最大,最小,極大,極小值等
Sub test()
arr = [b2:c9]
MsgBox WorksheetFunction.Sum(arr)
MsgBox WorksheetFunction.Average(arr)
MsgBox WorksheetFunction.Max(arr)
MsgBox WorksheetFunction.Min(arr)
MsgBox WorksheetFunction.Small(arr, 2)
MsgBox WorksheetFunction.Large(arr, 2)
End Sub
Sub test2()
Dim arr1(1 To 16)
arr = [b2:c9]
For Each a In arr
If a >= 80 Then
n = n + 1
arr1(n) = a
End If
Next
Stop
MsgBox WorksheetFunction.Average(arr1)
End Sub
Sub foreach循環()
Dim rng As Range
For Each rng In [b2:c9]
If rng >= 80 Then
n = n + 1 '計數
lj = lj + rng.Value '累加求和
End If
Next
MsgBox lj / n
End Sub
Sub for循環()
Dim a%
For a = 2 To 9
If Cells(a, 2) >= 80 And Cells(a, 3) >= 80 Then
Cells(a, 1).Interior.Color = 65535
End If
Next
End Sub
Sub 數組查找期中和期末都知足大於等於80()
Dim arr3
arr3 = [b2:c9]
b = UBound(arr3)
For a = 1 To b
If arr3(a, 1) >= 80 And arr3(a, 2) >= 80 Then
Cells(a + 1, 1).Interior.Color = 65535
End If
Next
End Sub
Sub 條件平均循環()
Dim rng As Range
For Each rng In [b2:c9]
If rng >= 80 Then m = m + 1: n = n + rng
Next
[A18] = n / m
End Sub
Sub 條件平均數組()
arr = Range("b2", Cells(Rows.Count, 3).End(xlUp))
For Each rng In arr
If rng >= 80 Then m = m + 1: n = n + rng
Next
[A19] = n / m
End Sub
8.
'比比哪一個程序的運行速度更快
Sub 方法一()
t = Timer
Set Rng = Cells(Rows.Count, 1).End(xlUp)
arr = Range([a1], Rng)
For Each a In Range([a1], Rng)
If a >= 90 Then n = n + 1: Cells(n, 3) = a
Next
MsgBox Format(Timer - t, "0.0000")
End Sub
Sub 方法二()
t = Timer
Dim arr1(1 To 5000, 1 To 1)
Set Rng = Cells(Rows.Count, 1).End(xlUp)
arr = Range([a1], Rng) '數組寫入
For Each a In arr
If a >= 90 Then
n = n + 1
arr1(n, 1) = a '將arr數組中的數據有條件的將數據寫入arr1數組
End If
Next
[d1].Resize(n) = arr1
MsgBox Format(Timer - t, "0.0000")
End Sub
Sub 數組()
Dim arr1(1 To 5000)
arr = Range("a2", Cells(Rows.Count, 1).End(xlUp))
For Each a In arr
If a >= 90 Then
m = m + 1
arr1(m) = a
End If
Next
Range("d2").Resize(m) = Application.Transpose(arr1)
'Range("d2:d" & m + 1) = Application.Transpose(arr1)
End Sub
9.函數
Sub function用法()
Cells(12, 1) = Application.CountIf([a1:a10], ">9")
Cells(12, 2) = Application.Count([a1:a10])
End Sub
10.what-if模擬分析方法是模擬影響結果的可變因素而測算出最後的結果
2017年2月18日
1.單變量求解
2.
3.mysql 的服務器服務的啓動和中止
4.mysql修改密碼
5.
1、數據庫架構:
服務器-> 多個數據庫->多張數據表(多個行和列)
2、 查看當前全部存在的數據庫
show databases;
一、建立測試數據庫test_db,
create database 數據庫名;
create database test_db;
create database if not exists zoo;
二、查看建立好的數據庫test_db的定義
show create database 數據庫名;
show create database test;
三、刪除測試數據庫test_db,
drop database 數據名
drop database test_db;
drop database if exists zoo;
四、選擇數據庫:
use 數據庫名;
6.規劃求解
7.模擬運算表
8.char 定長 varchar 變長
9.模擬運算表(雙重變量)
10.
建立員工表tb_emp1。
首先建立數據庫test_db,SQL語句以下:
create database test_db;
選擇建立表的數據庫,SQL語句以下:
use test_db;
建立tb_emp1表,SQL語句爲:
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
create table 表名
(字段名 數據類型 字段屬性,
.....);
create table tb_emp1
(id int(11) ,
name varchar(25),
depId int(11),
salary float);
查看數據表是否建立成功,SQL語句以下:
show tables;
查看錶格的結構:
describle 表名
desc 表名
desc tb_emp1;
一、定義數據表tb_emp2,其主鍵爲id,SQL語句以下:
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(25) | no | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
主鍵:primary key 對字段具備非空和惟一的約束
create table tb_emp2
(id int(11) not null primary key,
name varchar(25) not null,
deptId int(11) ,
salary float );
二、定義數據表tb_emp3,其主鍵爲id,SQL語句以下:
+--------+-------------+------+-----+
| Field | Type | Null | Key |
+--------+-------------+------+-----+
| id | int(11) | NO | PRI |
| name | varchar(25) | YES | |
| deptId | int(11) | YES | |
| salary | float | YES | |
+--------+-------------+------+-----+
create table tb_emp3
( id int(11) not null,
name varchar(25),
depId int(11) ,
salary float,
primary key(id));
三、定義數據表tb_emp4,假設表中間沒有主鍵id,爲了惟一肯定一個員工,能夠把name、deptId聯合起來作爲主鍵,
SQL語句以下:
+--------+-------------+------+-----
| Field | Type | Null | Key |
+--------+-------------+------+-----+
| name | varchar(25) | NO | PRI |
| deptId | int(11) | NO | PRI |
| salary | float | YES | |
+--------+-------------+------+-----+
create table tb_emp4
(name varchar(25) not null,
depId int(11) not null,
salary float ,
primary key(name,depId));
四、定義數據表tb_emp5,並在tb_emp5表上建立外鍵約束。
建立一個部門表tb_dept1,SQL語句以下:
+----------+-------------+------+-----+
| Field | Type | Null | Key |
+----------+-------------+------+-----+
| id | int(10) | NO | PRI |
| name | varchar(22) | NO | |
| location | varchar(50) | YES | |
+----------+-------------+------+-----+
create table tb_dept1
( id int(11) not null primary key,
name varchar(22) not null,
location varchar(50));
定義數據表tb_emp5,讓它的鍵deptId做爲外鍵關聯到tb_dept1的主鍵id,SQL語句爲:
+--------+-------------+------+-----+
| Field | Type | Null | Key |
+--------+-------------+------+-----+
| id | int(11) | NO | PRI |
| name | varchar(25) | YES | |
| deptId | int(11) | YES | MUL |
| salary | float | YES | | 普通索引index
+--------+-------------+------+-----+
MUL 不是外鍵的標誌,而是索引的標誌。
普通索引:key|index
外鍵: foreign key
constraint 外鍵名 foreign key(字段名) references 表名(字段名)
foreign key(字段名) references 表名(字段名)
create table tb_emp5
( id int(11) not null primary key,
name varchar(22),
deptId int(11),
salary float,
constraint fk_ed foreign key(deptId) references tb_dept1(id));
五、定義數據表tb_emp6,員工的姓名不能爲空,SQL語句以下:
+--------+-------------+------+-----+
| Field | Type | Null | Key |
+--------+-------------+------+-----+
| id | int(11) | NO | PRI |
| name | varchar(25) | NO | |
| deptId | int(11) | YES | |
| salary | float | YES | |
+--------+-------------+------+-----+
create table tb_emp6
( id int(11) not null primary key,
name varchar(25) not null,
depId int(11) ,
salary float);
六、定義數據表tb_dept2,指定部門的名稱惟一,SQL語句以下:
+----------+-------------+------+-----+
| Field | Type | Null | Key |
+----------+-------------+------+-----+
| id | int(11) | NO | PRI |
| name | varchar(22) | YES | UNI |
| location | varchar(50) | YES | |
+----------+-------------+------+-----+
惟一鍵: unique key
create table tb_dept2
( id int(11) not null unique key,
name varchar(22) unique key,
location varchar(50));
能夠最後添加惟一鍵:
unique key 惟一鍵名(惟一鍵)
七、定義數據表tb_dept3,指定部門的名稱惟一,SQL語句以下:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | YES | UNI | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
create table tb_dept3
(id int(11) not null primary key,
name varchar(22),
location varchar(50),
unique key unique_key_name(name));
八、定義數據表tb_emp7,指定員工的部門編號默認爲1111,SQL語句以下:
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(25) | NO | | NULL | |
| deptId | int(11) | YES | | 1111 | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
默認值 default
create table tb_emp7
(id int(11) not null primary key,
name varchar(25) not null,
deptId int(11) default 1111,
salary float );
九、定義數據表tb_emp8,指定員工的編號自動遞增,SQL語句以下:
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(25) | NO | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
自動:auto_increment
注意:自動auto_increment 只能在具備主鍵或惟一鍵的字段上添加
create table tb_emp8
(id int(11) not null primary key auto_increment,
name varchar(25) not null,
deptId int(11) ,
salary float);
十、分別使用DESCRIBE和DESC查看錶tb_dept1和表tb_emp1的表結構。
查看tb_dept1表結構,SQL語句以下:
desc tb_dept1;
describe tb_dept1;
十一、將數據表tb_dept2更名爲tb_deptment2。 再將表名tb_deptment2改成tb_dept2;
alter table 表名 rename 新表名
alter table tb_dept2 rename tb_deptment2;
alter table tb_deptment2 rename tb_dept2;
十二、將數據表tb_dept1中name字段的數據類型由VARCHAR(22)修改爲VARCHAR(30)。
修改屬性:modify 能夠修改字段名後面
modify 不能修改主鍵,可是能夠增長主鍵,不能減主鍵
alter table tb_dept1 modify name varchar(30) not null;
注意:modify 從新修改的屬性要全面
1三、將數據表tb_dept1中的location字段名稱改成loc,數據類型保持不變,
修改字段名 change
alter table 表名 change 字段名 新字段名 數據類型 字段屬性
alter table tb_dept1 change location loc varchar(50) not null;
1四、 將數據表tb_dept1中的loc字段名稱改成location,同時將數據類型變爲VARCHAR(60),
alter table tb_dept1 change loc location varchar(60) not null;
1五、在數據表tb_dept1中添加一個沒有完整性約束的INT類型的字段managerId(部門經理編號)
altr table 表名 add 字段名 數據類型 字段屬性 first|alter 字段名
alter table tb_dept1 add managerid int;
1六、在數據表tb_dept1中添加一個不能爲空的VARCHAR(12)類型的字段column1,SQL語句以下:
alter table tb_dept1 add column1 varchar(12) not null;
1七、在數據表tb_dept1中添加一個INT類型的字段column2,SQL語句以下:
alter table tb_dept1 add column2 int first;
1八、刪除數據表tb_dept1表中的column2字段。
alter table 表名 drop 字段名
alter table tb_dept1 drop column2;
1九、將數據表tb_dept1中的column1字段插入到location字段後面,SQL語句以下:
alter table tb_dept1 modify column1 varchar(12) not null after location;
20、刪除主鍵;
alter table tb_emp7 drop primary key;
21.添加主鍵
alter table tb_emp7 add primary key(id);
22.刪除惟一鍵
index 惟一鍵名字
alter table tb_dept2 drop index name;
23.添加惟一鍵
alter table ta_dept2 add unique key(name);
11.數據庫保存筆記
開啓文件 tee
最後結束文件 notee;
2017年2月19日
1.方案
方案(假設分析工具):是一組命令的組成部分。預測工做表模型的輸出結果。同時還能夠在工做表中建立並保存不一樣的數值組,而後切換到任意新方案以查看不一樣的結果。
2.數據有效性
數據有效性:限制其數據能錄入的有效範圍。
數據有效性"序列":是數據有效性中很是經常使用和重要的功
序列:能夠在單元格中自定義下拉列表的內容
3.
一、創建表格person
+-------+------------------+------+-----+---------+----------------+
| 字段名 | 數據類型 | 空 |主鍵 | 默認值 | 自增 |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | 是 |
| name | char(40) | NO | | | 否 |
| age | int(11) | NO | | 0 | 否 |
| info | char(50) | YES | | NULL | 否 |
+-------+------------------+------+-----+---------+----------------+
create table person
(id int(10) unsigned not null primary key auto_increment,
name char(40) not null default '',
age int(11) not null default 0,
info char(50) );
二、向表格person中插入數據
+----+-------+-----+----------+
| id | name | age | info |
+----+-------+-----+----------+
| 1 | green | 21 | lawyer |
| 2 | suse | 22 | dancer |
| 3 | tom | 22 | musician |
| 4 | mike | 20 | teacher |
+----+-------+-----+----------+
insert into 表名(字段名)
value (記錄1),(記錄2)....;
insert into person(id,name,age,info)
value(1,'green',21,'lawyer'),
(2,'suse' ,22,'dancer'),
(3,'tom',22,'musician'),
(4,'mike',20,'teacher');
insert into person
value(1,'green',21,'lawyer'),
(2,'suse' ,22,'dancer'),
(3,'tom',22,'musician'),
(4,'mike',20,'teacher');
insert into person(name,age,info)
value('green',21,'lawyer'),
('suse' ,22,'dancer'),
('tom',22,'musician'),
('mike',20,'teacher');
查詢表格信息:
select * from person;
三、創建表格person_old
+-------+------------------+------+-----+---------+----------------+
| 字段名| 數據類型 | 空 |主鍵 | 默認值 | 自增 |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | 是 |
| name | char(40) | NO | | NULL | 否 |
| age | int(11) | NO | | 0 | 否 |
| info | char(50) | YES | | NULL | 否 |
+-------+------------------+------+-----+---------+----------------+
create table person_old
(id int(10) unsigned not null primary key auto_increment,
name char(40) not null ,
age int(11) not null default 0,
info char(50) );
四、向表格person_old中插入數據
+----+------+-----+---------+
| id | name | age | info |
+----+------+-----+---------+
| 11 | l | 20 | student |
| 12 | m | 30 | police |
+----+------+-----+---------+
insert into person_old
value(11,'l',20,'student'),
(12,'m',30,'police');
五、將另外一張錶轉存到一張表中
insert into person(id,name,age,info)
select id,name,age,info from person_old;
insert into person(id,name,age,info)
select * from person_old;
注意:沒有value這個單詞
刪除數據:
delete from 表名 where 條件
delete from person where id>10;
建立表格person1,表結構和person相同:
create table person1 like person;//表結構同樣,可是表沒有數據 like
按照person表信息查詢的結果建立表格person2:
create table person2 as select * from person;//有數據,表結構有可能不一樣 as
注意:like 與as的區別
6,更新數據
對數據表person中id爲11的age改成15,name改成lining;
update 表名 set 字段名= 新數據.... where 條件;
update person set age=15,name='linling' where id=11;
在person表中,更新age值爲19-22的記錄,將info字段值都改爲student;
update person set info='student' where age between 19 and 22;
3,刪除數據
delete from tale_name[where condition] (condtion條件)
刪除數據表person中id爲11的記錄
delete from person where id=11;
4,在person表中,刪除age值爲19-22的記錄
delete from person where age between 19 and 22;
下面以一個例子說明如何使用SELECT從單個表中獲取數據。
首先定義數據表fruits,輸入語句以下:
+---------+--------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------+--------------+------+-----+---------+
| f_id | char(10) | NO | PRI | NULL |
| s_id | int(11) | NO | | NULL |
| f_name | char(50) | NO | | NULL |
| f_price | decimal(8,2) | NO | | NULL |
+---------+--------------+------+-----+---------
爲了演示如何使用SELECT語句,須要插入以下數據:
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| a1 | 101 | apple | 5.20 |
| a2 | 103 | apricot | 2.20 |
| b2 | 104 | berry | 7.60 |
| b5 | 107 | xxxx | 3.60 |
| bj1 | 101 | blackberry | 10.20 |
| bs1 | 102 | orange | 11.20 |
| bs2 | 105 | melon | 8.20 |
| c0 | 101 | cherry | 3.20 |
| l2 | 104 | lemon | 6.40 |
| m1 | 106 | mango | 15.60 |
| m2 | 105 | xbabay | 2.60 |
| m3 | 105 | xxtt | 11.60 |
| o2 | 103 | coconut | 9.20 |
| t1 | 102 | banana | 10.30 |
| t2 | 102 | grape | 5.30 |
| t4 | 107 | xbababa | 3.60 |
+------+------+------------+---------+
insert into fruits
values('b2',103,'berry',7.60),
('b5',107,'xxxx',3.60),
('bj1',101,'blackberry',10.20),
('bs1',102,'orange',11.20),
('c0',101,'cherry',3.20),
('l2',104,'lemon',6.40),
('m1',106,'mango',15.60),
('m2',105,'xxtt',2.60),
('m3',105,'xxtt',11.60),
('o2',103,'coconut',9.20),
('t1',102,'banana',10.30),
('t2',102,'grape',5.30),
('t4',107,'xbababa',3.60);
select 字段名
from 表名
where 條件
group by (分組)
having 條件
order by (排序)
limit m,n
union
表名->條件->分組->條件->字段名-union -> 排序->limit
from ->where-> group by ->having —>union->order by ->limit
一、從fruits表中檢索全部字段的數據,SQL語句以下:
select * from fruits;
二、查詢fruits表中f_name列全部水果名稱,SQL語句以下:
select f_name from fruits;
三、例如,從fruits表中獲取f_name和f_price兩列,SQL語句以下:
select f_name,f_price from fruits;
四、查詢價格爲10.2元的水果的名稱,SQL語句以下:
select f_name,f_price from fruits where f_price=10.2;
五、查找名稱爲「apple」的水果的價格,SQL語句以下:
select f_name,f_price from fruits where f_name="apple";
六、查詢價格小於10的水果的名稱,SQL語句以下:
select f_name,f_price from fruits where f_price<10;
七、s_id爲101和102的記錄,SQL語句以下:
select * from fruits where s_id in(101,102); //in (不是區間,而是集合)
select * from fruits where s_id= 101 or s_id=102;
八、查詢全部s_id不等於101也不等於102的記錄,SQL語句以下:
select * from fruits where s_id not in (101,102); //not in (集合) 不在集合內
select *from fruits where s_id <>101 and s_id != 102;
不等於 <> 或者!=
九、查詢價格在2.00元到10.20元之間的水果名稱和價格,SQL語句以下:
select f_name,f_price from fruits where f_price between 2.00 and 10.2;
select f_name,f_price from fruits where f_price>=2.00 and f_price<=10.20;
十、查詢價格在2.00元到10.20元以外的水果名稱和價格,SQL語句以下:
select f_name,f_price from fruits where f_price not between 2.00 and 10.2;
UNION合併表達查詢
union(去重的結果)
union all(不刪除重複的結果)
十一、查詢數據表fruits中f_price小於10的結果和fruits_new中s_id爲101和103的結果,SQL語句以下:
create table fruits_new as select * from fruits;//建立fruits_new 這張表,並有值
select * from fruits where f_price<10 union select * from fruits_new wher
e s_id in(101,103);//union 除重
mysql> select * from fruits where f_price<10 union all select * from fruits_new
where s_id in(101,103);//union all 不去重
去重:distinct
十二、查詢fruits表中的s_id有哪些:
select distinct s_id from fruits;
EXISTS exists 存在
1三、查詢fruits表中是否存在s_id=107的供應商,若是存在,則查詢fruits表中的記錄,SQL語句以下
select * from fruits
where exists(select * from fruits where s_id=107 );
1四、查詢fruits表中是否存在s_id=107的供應商,若是存在,則查詢fruits表中的f_price大於10.20的記錄,SQL語句
以下:
select * from fruits where exists (select * from fruits where s_id=107) and f_price> 10.20
1五、查詢fruits表中是否存在s_id=107的供應商,若是不存在則查詢fruits表中的記錄,SQL語句以下
select * from fruits where not exists (select * from fruits where s_id=107) and f_price> 10.20
1六、ORDER BY 字段名 asc(升序)|desc(降序):
查詢數據表fruits中水果的信息,並按照價格進行升序排列,SQL語句爲
select * from fruits order by f_price asc;
1七、查詢數據表fruits中水果的信息,首先按照s_id升序,在按照f_price進行降序排列
select *from fruits order by s_id asc,f_price desc;
LIMIT limit(偏移量,幾行數據)
1八、查詢數據表fruits中前5行的信息
select * from fruits limit 0,5;
select * from fruits limit 5;
1九、查詢數據表fruits中第3行到第6行的信息
select *from fruits limit 2,4;//從0 開始偏移量
函數:不能直接在where後面用
最大值: select max(字段名) from 表名 where 條件
最小值: select min(字段名) from 表名 where 條件
求和值: select sum(字段名) from 表名 where 條件
平均值: select avg(字段名) from 表名 where 條件
計 數: select count(字段名) from 表名 where 條件
GROUP BY order by 分組
20、查詢數據表fruits中每一個供應商各自水果的平均價格
select s_id, avg(f_price) from fruits group by s_id;
HAVING
2一、查詢每一個供應商各自水果的平均價格大於5元的記錄;
select s_id ,avg(f_price) from fruits group by s_id having avg(f_price)>5;
2二、查找f_name全部以’b’字母開頭的水果,SQL語句以下:
like 通配符:%,單個字符_
select * from fruits where f_name like 'b%';
2三、在fruits表中,查詢f_name中包含字母'g’的記錄,SQL語句以下:
select * from fruits where f_name like '%g%';
2四、查詢以’b’開頭,並以’y’結尾的水果的名稱,SQL語句以下:
select * from fruits where f_name like 'b%y';
2五、在fruits表中,查詢以字母’y’結尾,且’y’前面只有4個字母的記錄,SQL語句以下:
select * from fruits where f_name like '____y';
2六、在fruits表中,f_name中包含‘b’或者‘x'的記錄,SQL語句以下:
select * from fruits where f_name like '%b%' or f_name like '%x%';
正則表達式:regexp
以b爲開頭
select * from fruits where f_name regexp '^b';
以y爲結尾
select * from fruits where f_name regexp 'y$';
包含b或x(|兩邊可寫單個字符,也可寫字符串)
select * from fruits where f_name regexp 'b|x';
包含b或x,只能匹配單個字符
select * from fruits where f_name regexp '[bx]';
匹配字符集中除去a到x的其餘字符。
select * from fruits where f_name regexp '[^a-x]';
不包括xyz
select * from fruits where f_name not regexp '[xyz]';
匹配包含y且y前面最少四個字符.
select * from fruits where f_name regexp '....y';
.*:*前面的字符連續出現n個,n包含0; *={0,} like中 %=.*
ab* a ab abb abbb abbb....
ba連續出現最少兩次
select * from fruits where f_name regexp '(ba){2,}';
//ba只出現兩次
select * from fruits where f_name regexp '(ba){2,}'and f_name not regexp '(ba){3,}';
(ba)+:+表示符號以前的字符連續出現1次以上;{1,}
mysql 中的中文 配置 文件 my.ini
配置以後,服務斷開以後重啓。若是還不能夠,須要進行修改數據庫utf8
mysql> show create database company;
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| company | CREATE DATABASE `company` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> alter database company default character set utf8;
Query OK, 1 row affected (0.04 sec)
多表查詢:
一、首先定義第一張數據表fruits,輸入語句以下:
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| f_id | char(10) | NO | PRI | NULL | |
| s_id | int(11) | NO | | NULL | |
| f_name | char(50) | NO | | NULL | |
| f_price | decimal(8,2) | NO | | NULL | |
+---------+--------------+------+-----+---------+-------+
二、而後須要插入以下數據:
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| a1 | 101 | apple | 5.20 |
| a2 | 103 | apricot | 2.20 |
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| b5 | 107 | xxxx | 3.60 |
| bs1 | 102 | orange | 11.20 |
| bs2 | 105 | melon | 8.20 |
| c0 | 101 | cherry | 3.20 |
| l2 | 104 | lemon | 6.40 |
| m1 | 106 | mango | 15.60 |
| m2 | 105 | xbabay | 2.60 |
| m3 | 105 | xxtt | 11.60 |
| o2 | 103 | coconut | 9.20 |
| t1 | 102 | banana | 10.30 |
| t2 | 102 | grape | 5.30 |
| t4 | 107 | xbababa | 3.60 |
+------+------+------------+---------+
三、建立第二張數據表suppliers,SQL語句以下:
+--------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+----------------+
| s_id | int(11) | NO | PRI | NULL | auto_increment |
| s_name | char(50) | NO | | NULL | |
| s_city | char(50) | YES | | NULL | |
| s_zip | char(10) | YES | | NULL | |
| s_call | char(50) | NO | | NULL | |
+--------+----------+------+-----+---------+----------------+
create table suppliers
(s_id int(11) not null primary key auto_increment,
s_name char(50) not null,
s_city char(50),
s_zip char(10),
s_call char(50) not null);
四、向數據表suppliers中插入須要演示的數據,SQL語句以下:
+------+----------------+-----------+--------+--------+
| s_id | s_name | s_city | s_zip | s_call |
+------+----------------+-----------+--------+--------+
| 101 | FastFruit Inc. | Tianjin | 300000 | 48075 |
| 102 | LT Supplies | Chongqing | 400000 | 44333 |
| 103 | ACME | Shanghai | 200000 | 90046 |
| 104 | FNK Inc. | Zhongshan | 528437 | 11111 |
| 105 | Good Set | Taiyuan | 030000 | 22222 |
| 106 | Just Eat Ours | Beijing | 010 | 45678 |
| 107 | DK Inc. | Zhengzhou | 450000 | 33332 |
+------+----------------+-----------+--------+--------+
insert into suppliers
values(101,'FastFruit Inc','Tianjin','300000','48075'),
(102,'LT Supplies','Chongqing','400000','44333'),
(103,'ACME','Shanghai','200000','90046'),
(104,'FNK Inc','Zhongshan','528437','11111'),
(105,'Good Set','Taiyuan','030000','22222'),
(106,'Just Eat Ours','Beijing','010','45678'),
(107,'DK Inc','Zhengzhou','450000','33332');
五、在fruits表和suppliers表之間使用內鏈接查詢。
查詢以前,查看兩個表的結構:
select * from fruits,suppliers
where fruits.s_id=suppliers.s_id;
鏈接查詢:
select 字段名 from 表1 inner|left|right join 表2
on 表1.字段名=表2.字段名 inner|left|right join 表3 on 條件
where 條件;
內鏈接:
select * from fruits inner join suppliers
on fruits.s_id=suppliers.s_id;
左鏈接:
select * from fruits left join suppliers
on fruits.s_id=suppliers.s_id;
右鏈接:
select * from fruits right join suppliers
on fruits.s_id=suppliers.s_id;
六、在fruits表和suppliers表之間,使用INNER JOIN語法進行內鏈接查詢,SQL語句以下:
七、在fruits表和suppliers表之間,使用left join語法進行左鏈接查詢,SQL語句以下:
八、在fruits表和suppliers表之間,使用right join語法進行右鏈接查詢,SQL語句以下:
取別名:as
select f_id as fruit_id,s_id,f_name as fruit_name ,f_price from fruits;
select f_id,f1.s_id as fs_id,f_name,s_name from fruits as f1 inner join suppliers as s1
on f1.s_id=s1.s_id
where f1.s_id in (101,103);
判斷語句:case
select f_id,s_id,f_name,f_price,case
when f_price<5 then '5元之內'
when f_price between 5 and 10 then '5-10元'
else '10元以上'
end as 價格區間
from fruits;
子查詢
九、使用內鏈接查詢供應f_id= ‘a1’的水果供應商提供的水果種類,SQL語句以下:
select s_id from fruits where f_id='a1';
select f_id,s_id,f_name from fruits
where s_id=101;
select f_id,s_id,f_name from fruits
where s_id=(select s_id from fruits
where f_id='a1');
select f_id,fruits.s_id fs_id,f_name,f_price,suppliers.* from fruits inner join suppliers
on fruits.s_id=suppliers.s_id;
select f_id,s_id,f_name from
(select f_id,fruits.s_id fs_id,f_name,f_price,suppliers.* from fruits inner join suppliers
on fruits.s_id=suppliers.s_id) as f1
where s_id=(select s_id from fruits
where f_id='a1');
十、ANY和SOME關鍵字是同義詞,表示知足其中任一條件,它們容許建立一個表達式對子查詢的返回值列表進行比較,只要知足內層子查詢中的任何一個比較條件,就返回一個結果做爲外層查詢的條件。
下面定義兩個表tb1和tb2:
tb1:
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num1 | int(11) | NO | | NULL | |
+-------+---------+------+-----+---------+------
tb2:
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num2 | int(11) | NO | | NULL | |
+-------+---------+------+-----+---------+-------+
十一、分別向兩個表中插入數據:
insert into tb1
values(1),(3),(5),(7),(9),(13),(17);
insert into tb2
values(2),(4),(6),(8),(10),(12);
十二、返回tb2表的全部num2列,而後將tb1中的num1的值與之進行比較,只要大於num2的其中一個值,其爲符合查詢條件的結果。
select num2 from tb2;
select num1 from tb1
where num1>any(
select num2 from tb2);
select num1 from tb1
where num1>(
select min(num2) from tb2);
1三、返回tb1表中比tb2表num2 列全部值都大的值,SQL語句以下:
select num1 from tb1
where num1>all(
select num2 from tb2);
select num1 from tb1
where num1>(
select max(num2) from tb2);
2017年2月20日
1.多個下拉列表的切換
2.數據分析能作什麼?活動覆盤、項目立項、專題報告、項目優化、市場預測、改進技術、幫助研發。
3.應用實例:醫療行業、能源行業、通訊行業、電商行業
4.數據的來源:
(1)外部數據:社會人口數據 宏觀經濟數據 新聞國情數據 市場調研數據
(2)內部數據: 用戶行爲數據 服務端日誌數據 CRM&交易數據
5.方法論是從宏觀角度出發,從管理和業務的角度提出的分析框架,知道咱們接下來具體分析的方法。方法是微觀的概念,是指咱們在咱們在具體分析過程當中使用的方法:
SWOT分析法:從優點(Strength)、劣勢(Weakness)、機遇(Opportunity)、威脅(Threat)四個方面分析內外環境,適用於宏觀分析。
5W2H分析法:從Why、When、Where、What、Who、How、How much 7個常見的維度分析問題。
PEST分析法:從政治(Politics)、經濟(Economy)、社會(Society)、技術(Technology)四個方面分析內外環境,適
用於宏觀分析。
6.用戶購買行爲分析:why what who when where How 、How much
7.
11.
12.
13.什麼時數據分析:它就是基於商業目的,有目的地進行收集、整理、加工和分析數據,提煉有價值信息的一個過程。
2017年2月21日
1.跨工做表的序列引用
2017年2月22日
1.雙關鍵字限制
注意:A45與B45= 中A與B要絕對引用,由於列號不變
2017年2月23日
1.用戶行爲理論:
用戶使用行爲是指用戶爲獲取、使用物品或服務所採用的各類行爲,通常按照如下過程:對產品有一個認知、熟悉的過程,而後試用,再決定是否繼續消費使用,最後成爲忠實用戶。
認識->熟悉->使用->使用->忠誠
2.AARRR理論:增加黑客的海盜法則,精益創業的重要框架,從獲取(Acquisition)、激活(Activition)、留存(Retention)、變現(Revenue)和推薦(Referral)5個環節增加。互聯網企業能夠重點關注AARRR方法論,對於精益化運營、業務增加的問題,這個方法論很是契合。
3.AARRR理論漏斗圖
4.數據分析方法論
5.對比分析法:
(1)對比分析法是將兩個或兩個以上的數據進行比較,分析其中的差別,從而揭示這些食物所表明的發展變化狀況和規律性。
6.對比分析法:
(1)指標的口徑範圍、計算方法計量單位一致。
(2)對比的對象要有可比性
(3)對比的指標類型必須一致
7.杜邦分析法
(1)利用各主要財務指標間的內在聯繫,對企業財務狀態及經濟效益進行綜合分析評價的方法。
8.矩陣關聯分析法:
9.具體分析方法:
10.數據分析報告:
(1)數據分析報告是根據數據分析原理和方法,運用數據來反映、研究和分析事物現狀、問題、緣由、本質和規律,並得出結論,提出解決問題的一種分析應用文體。
分析報告種類:
(1)平常數據通報:月度數據報告、日報表
(2)專題分析報告:用戶流失分析、提高用戶消費分析
(3)綜合分析報告:企業運營報告、世界人口發展報告
數據分析報告結構:
分析背景->分析目的->分析思路->正文->結論與建議->附錄
11.什麼是B2C?
B2C是Business-to-Customer的縮寫,而其中文簡稱爲"商對客"。"商對客"是電子商務的一種模式,也就是一般說的商業零售,直接面向消費者銷售產品和服務。
12.天貓的6大優點:
13.天貓的4大特點
14.天貓的店鋪類型:旗艦店、專賣店、專營店
15.
16.免費推廣:
免費推廣是指不花錢的狀況下,對產品或店鋪做出的推廣行爲。
免費推廣:標題優化、寶貝上下架調整、產品屬性的完整、主圖的點擊率
17.付費推廣:
付費推廣是指經過工具或方法,得到流量,從而提升店內的流量和銷量。
付費推廣:直通車、鑽石展位、淘寶客
18.直通車
(1)直通車:按單次點擊收費的引流工具,適合單品爆款打造。
19.鑽石展位
(1)鑽石展位:按千次展示收費的引流工具,適合大型活動或品牌推廣。
(2)
20.淘寶客:
(1)淘寶客:按成交結果收費的引流工具,適合平常推廣。
(2)
21.
22.數據分析第三方工具:江湖策,生意參謀,數據魔方
23.會員分析的目的:提升復購率、提升客單價、合理維護客戶關係、恰當推廣商品。
24.千牛賣家工做臺是由阿里巴巴集團官方出品,由PC版本和手機版本,淘寶賣家,天貓商家都可使用。千牛工做臺包含賣家工做臺、消息中心、阿里旺旺、量子恆道、訂單管理、商品管理等主要功能。
25.生意參謀:
26.後臺導航-店鋪左側欄
27.
28.流量的本質(個性化搜索)
2018年2月24日
1.產品分類
嚴格意義上來講,爆款分二種、一種是利潤爆款,一種是引流爆款。利潤爆款也叫小爆款,引流爆款叫大爆款,從成本上來講,引流爆款每每會利潤較低!
訂價策略
(1)常規款:常規款爲店鋪的主營產品。此類產品多以成本導向爲訂價方法進行銷售。區別於流量款有價格優點,區別於活動款有折扣優點,區別於利潤款,毛利率並非很高。
(2)流量款:流量款多爲引流產品,除有自身的產品優點外,其性價比也很佔優。對於同類同質產品能在價格的引導上作出很好的示範,起到吸引店鋪流量的做用。
(3)利潤款:顧名思義,利潤款爲產品自己具備核心優點或產品類別同質同類競爭少,因此在利潤的追求上會過多。
(4)活動款:活動款的訂價須要留有必定的折扣空間,刺激消費者購買,每每做爲促銷使用。
(5)爆款:爆款的訂價策略爲區間浮動,根據爆款的預熱期,產品價格偏低,追求性價比;到爆款的發展期,產品價格保持優點;到爆款的成熟期,價格能夠略微上漲;到爆款的衰退期,低價引流爲其餘爆款作預熱,或將爆款轉爲利潤款,榨乾該爆款的剩餘價值。
(6)邊緣款:此類產品銷售形勢較低迷,沒有爆款或相對爆款的潛質,不具有其餘訂價策略的核心特色,每每被賣家和消費者忽視。
2.
3.
3.三個鑽展的三個階段
4.
5.定向推廣
(1)定義:
(2)定向原理
6.直通車
7.
8.淘寶客
9.
如意投的特色是:系統智能 精確投放 流量可控 渠道精確
10.
CRM實際上是指全部咱們與客戶接觸點的關係管理。
CRM的目的是爲了知足客戶需求;維護好喝客戶之間的關係。
客戶關係管理本質:對客戶進行細分根據客戶價值以及特徵進行差別化營銷。
11.
12.Excel 凍結
2017年2月25日
1.網店核心思惟圖
2.
網店運營靠流量,大多數工做都是圍繞流量展開,不少電商人會把流量看做店鋪的生命線,可是很容易走入一味砸錢買流量的誤區。流量問題應該客觀的看待,流量應該圍繞着咱們平常運營,運營是有機會的,而流量也應該有規劃,每一個點擊背後都是一個個活生生的顧客,不一樣的流量入口有着其固有的基因,每一個關鍵詞的背後也表明着必定的市場需求,本章節主要分析,如何用數據化的方式精準定位本身的目標顧客,下降引流成本,從而佔領主搜陣地。
1、數據制定流量規劃
咱們明確作電商是爲了作生意,而非作流量,無論是從長期來講,仍是從短時間來講,獲取流量的最終目的仍是爲了成交,既然一切圍繞生意,而生意應該有所計劃的,那麼對於流量咱們就應該有所規劃。
1、流量的需求
(1)銷量的目標決定流量的數量需求
公司不管大小,都會作年度規劃,哪怕沒有年度規劃,老闆心中也有一年的計劃,而年度規劃中很重要的一塊就是銷售目標規劃。
首先,咱們看一下銷售額公式:
銷售額=流量*轉化率*客單價
這樣,能夠得出來:
流量=銷售額/(轉化率*客單價)
在定位及產品品類不發生太大變化的狀況下,大多數店鋪轉化率和客單價,必定時間內都比較穩定,因此咱們就能夠根據銷售目標來推倒出來流量的需求。
可是,要注意幾點:1、不一樣的流量入口,轉化率及客單價會有所差別,其中活動流量所佔的比重最大,能夠單獨考慮。2、銷量目標、轉化率目標、客單價目標也應該根據類目節奏和本身的綜合狀況進行微調。
圖1整年流量需求表
固然,制定目標的過程也是須要和相應團隊一塊兒來制定的,目標的不一樣決定行爲的不一樣,固然這個涉及到團隊管理的內容,這裏不作討論,只是須要強調的是,既然目標制定了,咱們應該讓團隊的工做圍繞目標去展開,而流量的目標應該是負責運營推廣的同事去實現。
(2)轉化的需求決定流量的質量需求
作電商,不只僅有流量的需求,流量的目的是爲了轉化,這裏就涉及到一個流量質量的問題,即流量與店鋪產品定位的匹配程度。不一樣的流量,在同樣的產品、同樣的視覺及同樣的客服水平面前,也會有不一樣的表現,轉化率、客單價、以及產品的銷售結構都有所不一樣。
流量質量須要怎麼把控呢?這裏給你們介紹一個流量質量金字塔原理:流量應該是分層的,頂部的流量相對比較少,與產品定位匹配性高,轉化率高,也就是咱們所說的精準流量;中部的流量精準性良好,轉化率通常,數量也比頂部的流量大;而最下面的流量則是屬於比較寬泛的流量,不太精準,轉化率比較低,同時流量也比較大。
咱們在獲取流量的時候應該從頂部開始獲取,對於不一樣入口的流量獲取的方法也不一樣:1、天然搜索及直通車流量。天然搜索是根據關鍵詞來獲取流量的,而直通車流量本質上也屬於搜索流量,只是咱們能夠經過出價以及一些其餘的推廣技巧提升排名。經過關鍵詞獲取流量的精準性,取決於關鍵詞的精準性,好比,對於一個賣12歲男童春秋牛仔褲的賣家來講,「牛仔褲」,「童裝牛仔褲」、「男童牛仔褲」、「男大童牛仔褲」、「男大童牛仔褲春秋」,這一系列關鍵詞的精準性就愈來愈精準,相對來講轉化率也較高。2、鑽石展位。鑽展是經過向被定向的消費者展示廣告,吸引消費者點擊,而產生的流量。定向的準確與否,直接影響了鑽展的流量精準性,同時影響鑽展流量的精準程度的還有鑽展素材的設計等。3、淘寶客。淘寶客的流量,若是淘寶客是經過「愛淘寶」搜索進來的流量,也是屬於搜索流量,精準性取決於站外搜索的關鍵詞的精準性。若是是經過本身招募的淘寶客進來的流量,則取決於淘寶客的平臺與所營產品的匹配程度。4、活動流量。活動流量的精準性取決於活動平臺上瀏覽的顧客與所營產品的匹配程度。
圖2流量金字塔原理
2、流量的基因
(1)顧客購物習慣的改變
消費者消費過程,由「購物」變成了「逛街」。在80年代,那時候尚未超市,咱們到商店購物,是進不了商店櫃檯的,顧客須要買什麼,而後老闆就會拿什麼,這時候顧客平均停留時間極短,沒有訪問深度,更談不上關聯銷售;到90年代之後,超市開始出現,顧客能夠進入店內任意選購,這時候顧客平均停留時間開始獲得增加,訪問深度也開始加深,不少超市爲了讓顧客逛更多的東西,開始規劃顧客行走路線;而宜家則把這方面作到了極致,在店內佈置不一樣的主題,迷宮式佈局,讓顧客流連忘返,還不以爲累,顧客的訪問深度及停留時間獲得了極大的增加。
(2)顧客購物路徑的改變
顧客的這種消費行爲改變,在網路上依然存在,淘寶平臺上,經過搜索成交的比例逐年在下降,而經過主題性活動等形式成交的比例逐步上升。這說明更多的顧客喜歡在愉悅的瀏覽中購物。若是說搜索流量帶着理性購物的基因,更多的是一種剛性的需求,而主題性活動的流量則帶着感性購物的基因,更多的是一種衝動型消費。
不一樣的流量有着其特定的基因,哪怕就是每個關鍵詞背後也是蘊含着不一樣的消費羣裏,好比說,「嬰兒推車歐式」表明着一種對品質的須要,「韓版童裝」表明着一種對於潮流款式的追求,鑽展也是如此,不一樣的位置,不一樣的定向,顧客羣體都不同,在作流量規劃的同時,更應該注意流量的基因是否與產品定位相匹配。
3、流量規劃表
在瞭解了各個入口的流量基因,熟悉各個入口的流量轉化率、客單價及流量成本之後,咱們能夠把每一年的流量目標按月來劃分,這樣就是每月的流量規劃表,在制定好每個月流量規劃表之後,須要分解實施,同時進行監控,確保最終流量目標的達成。
2、數據把控推廣節奏
大多數類目,市場的需求在一年當中會有變化,那麼咱們的推廣節奏也應該隨着市場的變化而改變,致使市場需求變化的因素有產品自己的特性,也有平臺的促銷節奏,同時也跟傳統的節日相關,瞭解整年的營銷節奏,須要推廣在旺季來臨以前把本身的產品推到搜索排名的前幾名,從而在旺季來臨的時候獲取大量流量。
1、產品銷售節奏。
(1) 類目銷售節奏。推廣節奏的安排首先須要考慮本類目的銷售節奏,具體能夠在數據魔方è行業分析è總體狀況中查看,須要注意的是查詢時間須要選擇1年。
圖3類目銷售節奏
(2) 子類目銷售節奏。光分析類目營銷節奏還不夠,咱們還須要看每一個子類目的銷售節奏。能夠在行業選擇的時候,選擇子類目查看,一樣時間也須要選擇1年。
圖4類目銷售節奏
(3) 單品生命週期。涉及到單品打造的時候,還須要考慮單品的生命週期,咱們能夠在淘寶指數,根本本產品的主搜關鍵詞進行查詢。例:男童長袖T恤。
圖5單品生命週期
在瞭解所經營產品的銷售節奏之後,就須要針對性的進行推廣投入、老顧客營銷、組織促銷活動,在進入快速增加的時候大量投入,而進入成熟期之後,能夠根據每一個波段進行階段性投入。
2、整年促銷節點
作營銷還講究師出有名,咱們全部的活動必需要有主題,能夠是傳統節日、重要的文體賽事、突發的熱門話題等等,咱們能夠對整年的相關主題進行總結。
而不一樣的主題適合的活動也不同,有些是能夠用來塑造品牌,有些是能夠進行大規模促銷,促銷也須要避免頻率過高,不一樣的類目能夠進行自行選擇。
3、平臺營銷安排
每一年淘內的平臺也會有本身的營銷節奏安排,如傳統的「雙十一」、「雙十二」、「66大促」、「99大促」等,同時類目也會有一些平常的營銷安排,不一樣類目會有所不一樣,具體能夠參考類目幫派。
若是瞭解了平臺的營銷節奏,咱們就能夠把店內營銷活動和平臺的營銷活動結合,靈活借力;同時咱們還須要瞭解各活動的要求,爭取可以參與進去。
4、整年營銷計劃表
最後咱們能夠制定店鋪的整年營銷計劃表,針對不一樣時間點的熱銷類目,結合當時的熱點時事或者即日,整合平臺的資源,提升店鋪的營銷活動效果。
圖6整年營銷節奏
3、數據提升展示量
1、排名與流量
按照PV計算,前三頁佔有全部PV的84%,其中第一頁65%,第二頁11%,第三頁7%,而從點擊即IPV的角度,前三頁佔有全部IPV的86%,其中第一頁佔68%,第二頁佔12%,第三頁佔6%,從成交金額來看第一頁更是佔了全部成交金額的88%,佔成交筆數的87%。這說明了佔領排名無論對於流量獲取來講,仍是對於最終成交來講,都顯得特別重要。
2、上下架時間優化
(1)上下架時間的概念及影響。淘寶的排名中有一個模型叫作時間模型,天貓和淘寶中的全部寶貝上架後第7天都會有下再上架的過程,在淘寶搜索中,下架以前的一段時間內,在綜合排序裏寶貝會獲得必定的加權,競爭的寶貝數越多,獲得的加權時間就越短。
(2)一天中的顧客訪問高峯。在淘寶平臺上,不一樣的時間點訪問的人數,搜索的人數都不一樣,不一樣類目的顧客訪問的時間也有所差異,具體咱們能夠經過數據魔方è行業分析è賣家信息分析,中查看查詢。
圖7 PC來訪分析
圖8無線來訪分析
(3)根據顧客來訪高峯來安排上下架。能夠看出來,PC的訪問時間與無線的訪問時間有所差異,無線更集中在晚上,爲了得到一個較好的排名,咱們會把主推的寶貝放到流量較大的時間段,那麼若是店鋪產品更適合於顧客在PC上瀏覽,則能夠多根據PC端上下架時間進行安排,若是店鋪產品屬於單價比較低的快速決策類產品,即顧客購買所要花的決策時間比較短的話,能夠多安排在晚上20:00到23:00上下架。
有一種狀況須要注意,其實安排上下架的時候就相似於田忌賽馬,有些時候咱們寶貝的競爭力不強,而行業競爭又很激烈,這些寶貝其實仍是建議安排在競爭較小的時間段上下架。
通常狀況下(具體能夠用一些軟件來查看類目的競爭狀況),早10點的競爭較爲激烈,可是早10點的流量跟一天當中下午及晚上的流量相差不大,因此安排上下架的時候也須要重點考慮。
若是處於爆款競爭的類目,建議賣家監控競爭對手的上下架時間,來針對性的安排本身店鋪寶貝的上下架時間。
(4)上下架須要考慮的同店打散原則。搜索中有個同店打散原則,即除了豆腐塊(人氣及綜合排序的前三名爲商城位置,成爲豆腐塊),每一個搜索結果頁面(綜合和人氣)出現的同店產品最多不會超過2個。那麼這是時候就遇到了問題,若是一個店鋪內同類產品,被統一關鍵詞覆蓋,都在同一時間段上下架,那麼即便全部寶貝的人氣都很高,也只能在統一頁面出現2個,其餘產品都會被擠到後面去,因此爲了獲得最大量的曝光,咱們能夠在安排上下架時間的時候,同類產品分開,店內最熱銷的款上下架時間的當天,甚至能夠不安排同類產品。
(5)經過上下架考慮避開強勁競爭對手。咱們甚至有辦法經過一些軟件查詢同類熱銷產品的上下架時間,爲了避開強勁競爭對手,咱們能夠把本身產品與競爭對手產品錯開時間進行上下架。
理解了以上的原理,現提供一個工具幫助讀者安排本身產品的上下架時間,從而有效的提升展示量。
第一步:把店內產品根據不一樣的類別進行分類,把被同一類關鍵詞覆蓋的產品放到同一類別裏:
圖9店鋪產品梳理表
第二步:根據顧客來訪高峯,把產品的上下架時間安排在不一樣的時間段。
圖10上下架時間計劃表
小技巧:(1)在調整上下架時間的時候,適宜把時間往自己的上下架時間日後移,而避免往前移,舉個例子,若是一款產品是週一早上11點15分下架,那麼咱們調整的時候能夠調整到週一11點15分之後,而不要調整到週一的11點15分之前,以免損失一次下架時間以前的曝光。(2)按照訪問高峯安排上下架同時面臨的一個挑戰就是,那個時間段競爭會比較激烈,若是一個新開的店鋪,能夠在次高峯時間段安排上下架,避開高峯,能獲得一個更長時間的搜索加權。
3、櫥窗推薦優化
櫥窗推薦(又名賣家熱推),即每位商家根據店鋪實際經營狀況,將店鋪內最有競爭力的寶貝經過設置成櫥窗推薦的方式(在「我是賣家」—「寶貝管理」—「櫥窗推薦」中設置),在淘寶搜索排序中,其餘條件相同的狀況下,櫥窗推薦寶貝將得到優先展現機會。櫥窗推薦規則僅應用在淘寶搜索排序下,不影響天貓搜索排序。
(1)集市店新櫥窗得到規則
規則維度 |
規則內容 |
信用等級 |
星級賣家獎勵10個櫥窗位; 鑽級賣家獎勵20個櫥窗位; 冠級賣家獎勵30個櫥窗位。 |
開店時間 |
開店時間少於90天內,獎勵10個櫥窗位; 開店時間滿1年獎勵2個櫥窗位; 開店時間滿2年獎勵5個櫥窗位; 開店時間滿3年獎勵10個櫥窗位。 |
消保 |
繳納消保保證金的,獎勵5個櫥窗位 |
店鋪周成交額(不一樣類目有所差別) |
周成交額是指上週的周成交額,計算週期爲週四0點至週三23:59:59; 根據你的信用等級,店鋪上週支付寶周成交額:達到XX金額時,獎勵30個櫥窗位;達到XX金額時,獎勵45個櫥窗位 |
金牌賣家 |
金牌賣家獎勵:5個櫥窗位 |
違規扣分 |
通常違規扣分(A類扣分)滿12分及以上,扣除5個櫥窗位; 嚴重違規扣分(B類扣分)滿12分及以上,扣除10個櫥窗位; 出售假冒商品被違規扣分(C類扣分)滿24分及以上,扣除20個櫥窗位。 |
(2)天貓店櫥窗得到規則
2013年4月18日生效的《天貓櫥窗推薦規則》根據天貓商家每月(以天然月爲計算單位)的銷售金額,分設七個層級,每一個層級有不一樣的櫥窗推薦位數量。
月銷售金額:指上個天然月成交而且已成功的交易。
月銷售金額(M) |
櫥窗推薦位(個) |
M<1.5萬 |
60 |
1.5萬=<M<10萬 |
100 |
10萬=<M<30萬 |
200 |
30萬=<M<100萬 |
300 |
100萬=<M<300萬 |
500 |
300萬=<M<500萬 |
1000 |
M>= 500萬 |
2000 |
(3)利用櫥窗推薦提升展示量
櫥窗推薦會影響搜索結果的綜合排序和人氣排序,會有很是高的加分,爲了將流量集中到咱們的優點寶貝,通常咱們會設置10-15個櫥窗位(根據寶貝數的多少和櫥窗位的多少會有所調整)推薦臨近下架時間的寶貝,其餘的櫥窗推薦位推薦店內最熱銷或者最想主推的寶貝。
4、關鍵詞的匹配原則
標題關鍵詞的優化是搜索優化的重要組成部分,這是不少賣家最感興趣的工做,卻又以爲難如下手,這裏只是從提升展示量的角度跟你們分享幾個要點,重要提示,一下只是搜索的一些小技巧和知識,具體實施須要結合所經營的類目進行融會貫通:
(1)儘可能的覆蓋更多的搜索關鍵詞。咱們分析淘詞的TOP500詞就會發現,對於大多數類目來講,TOP500詞都是有爲數很少的字進行各類各樣的排列組合,而只要標題中覆蓋了消費者搜索的關鍵詞,只要不存在分詞上的問題,那麼理論上都有可能被搜索到,因此咱們能夠在優化標題的時候考慮到儘可能多的覆蓋搜索關鍵詞。
(2)利用徹底匹配提升可拆分關鍵詞的關鍵詞匹配分。在人氣排序中,關鍵詞的匹配分是人氣的一個組成部分,什麼叫徹底匹配,舉個例子,好比在搜索「男童牛仔褲」這個關鍵詞,這個關鍵詞在搜索過程當中會被拆成「男童牛仔褲」這樣的幾個詞根,在童裝類目中,只要包含「男童牛仔褲」這幾個詞根的,無論排列順序如何,均可以被檢索到,可是先後順序一致,並緊密排列的關鍵詞會獲得最高的關鍵詞匹配分。若是咱們想提升單個的關鍵詞展示量,能夠採用徹底匹配的技巧。
(3)合理利用長尾詞,避開強勁競爭對手。每一個關鍵詞背後都是由於有特定的人羣來搜索,其實每一個關鍵詞就對應一個市場,關鍵詞的競爭度有強有弱,具體咱們能夠在數據魔方è全網關鍵詞查詢,輸入寶貝的主推關鍵詞,分析查詢結果。
咱們以淘寶平臺上搜索量最大的連衣裙爲例,能夠看到下圖,仔細分析,咱們發現根據搜索指數排序,和當前寶貝數排序並不相同,這樣咱們就能夠用搜索指數除以當前寶貝數,得出單個關鍵詞的競爭激烈程度。再參照轉化率能夠兼顧轉化效果來挑選競爭藍海市場,咱們參照直通車點擊單價,能夠挑選在直通車推廣中相對競爭較弱的詞。
咱們能夠看到「早秋新款套裝連衣裙」、「森系連衣裙」等關鍵詞競爭熱度都小於周圍的其餘關鍵詞,若是咱們寶貝跟這些關鍵屬性比較相符的話,咱們能夠把它們添加到咱們的寶貝標題中來。
圖11淘詞分析
3.
一、從fruits表中檢索全部字段的數據,SQL語句以下:
二、查詢fruits表中f_name列全部水果名稱,SQL語句以下:
三、從fruits表中獲取f_name和f_price兩列,SQL語句以下:
四、查詢價格爲10.2元的水果的名稱,SQL語句以下:
五、查找名稱爲「apple」的水果的價格,SQL語句以下:
六、在fruits表中查詢s_id = 101或者102,且f_price大於5,而且f_name=‘apple’的水果價格和名稱,SQL語句以下:
explain
select f_name,f_price from fruits
where s_id in (101,102) and f_price>5 and f_name='apple';
(s_id=101 or s_id=102) and f_price>5
describe fruits; explain
七、在suppliers表中查詢s_city等於「Tianjin」的供應商s_id,而後在fruits表中查詢全部該供應商提供的水果的種類,SQL語句以下:
select s_id,f_name from fruits
where s_id in (select s_id from suppliers where s_city='Tianjin');
exists:
select s_id,f_name from fruits
where exists (select s_id from suppliers where s_city='Tianjin' and
s_id=fruits.s_id
)
鏈接:
select fruits.s_id,s_name,fruits.f_name,s_city,f1.f_id from fruits
right join suppliers on fruits.s_id=suppliers.s_id
where s_city='Tianjin';
select fruits.s_id,s_name,f_name,s_city from fruits,suppliers,fruits f1
where fruits.s_id=suppliers.s_id and s_city='Tianjin' ;
八、在suppliers表中查詢s_city等於「Tianjin」的供應商s_id,而後在fruits表中查詢全部非該供應商提供的水果的種類,SQL語句以下:
select s_id,f_name from fruits
where s_id not in(select s_id from suppliers
where s_city='Tianjin');
九、查詢fruits表,爲f_name取別名fruit_name,f_price取別名fruit_price,爲fruits表取別名f1,查詢表中f_price < 8的水果的名稱,SQL語句以下:
select f_name as fruit_name,f_price fruit_price from
fruits f1
where f_price<8;
十、在fruits表中,查找f_name字段中包含字母’o’或者’t’的記錄,SQL語句以下:
select * from fruits
where f_name regexp 'o|t'; '[ot]'
where f_name like '%o%' or f_name like '%t%';
十一、在fruits表中字段名爲s_id上創建外鍵鏈接到suppliers表s_id上,SQL語句爲:
alter table fruits add constraint fd_ed foreign key(s_id)
references suppliers(s_id);
十二、刪除fruits表中的外鍵,SQL語句爲:
alter table fruits drop foreign key fd_ed;
1三、查詢fruits表中的信息,並將結果首先按照s_id升序排列,在按照水果名稱降序排列:
select * from fruits
order by s_id asc,f_name desc;
1四、修改fruits表中s_id的字段名,將字段名改成fs_id,其他信息不變,SQL語句爲:
alter table fruits change s_id fs_id int(11) not null;
1五、輸出fruits表中第3行到第7行的數據,SQL語句爲:
select * from fruits
limit 2,5;
1六、查詢fruits表中供應商信息及各供應商提供水果的平均價格,SQL語句爲:
select fs_id,avg(f_price) from fruits
group by fs_id;
1七、查詢fruits表中每一個供應商供應的水果大於4.5元的記錄,SQL語句爲:
select * from fruits
where f_price>4.5
group by fs_id;
1八、查詢fruits表中供應商的信息,SQL語句以下:
select distinct fs_id from fruits;
1九、查詢fruits表中有多少個供應商,SQL語句以下:
select count(distinct fs_id) from fruits;
20、查詢fruits表中每一個供應商所供應水果價格最高的記錄;
select fs_id,max(f_price) from fruits
group by fs_id;
select fs_id,f_name,f_price from fruits
where (fs_id,f_price) in (
select fs_id,max(f_price) from fruits
group by fs_id);
2一、在fruits表中添加一字段名爲num的字段,數據類型爲int,默認值爲3;(該字段爲銷售量的意思)
alter table fruits add num int default 3;
2二、查詢fruits表中供應商總銷售額前三名的信息及銷售額;
select fs_id,sum(f_price*num) from fruits
group by fs_id
order by sum(f_price*num) desc
limit 3;
2三、查詢fruits表的信息,並添加‘單價情況’的信息,若是單價低於5元,則標明‘低於5元’,若是單價高於10元,則代表’高於10元’,其餘的狀況,請代表‘5-10元’,SQL語句爲:
select *,case
when f_price<5 then '低於5元'
when f_price between 5 and 10 then '5-10'
else '高於10元'
end as 單價情況
from fruits;
2四、怎樣查詢fruits表中fs_id和f_name信息重複的記錄;
select fs_id,f_name ,count(fs_id) from fruits
group by fs_id,f_name
having count(fs_id)>1;
4.總結
主鍵:primary key 對字段具備非空和惟一的約束; 索引
非空:not null 字段中的值不能爲空;
惟一鍵: unique 字段中的值不能出現重複數據; 索引
索引: index | key 加快該字段中數據的查詢
外鍵:foreign key 讓一張表中一字段的數據對另外一張表中對應字段的 數據取值範圍進行約束,保證數據一致性;
默認值:default 設定默認值
自增:auto_increment 只能在具備主鍵或惟一鍵的字段上添加;
註釋:comment
alter table 表名 add primary key|unique|index|foreign key...
alter table 表名 drop primary key;
alter table 表名 drop key|index|foreign key 鍵名稱;
alter table 表名 modify 字段名 數據類型 not null|default| auto_increment|comment;
alter table 表名 change 字段名 字段名 數據類型 not null| default|auto_increment|comment;
alter table 表名 add 字段名 數據類型 字段屬性 first|after 字段名;
alter table 表名 drop 字段名;
範式:
第一範式:數據表的單個字段中變量只能有一個。
例:崗位:銷售部經理 —>部門:銷售部 職位:經理.
第二範式:知足第一範式的條件下,表中字段名的數據由一個字段主鍵決定;
例:一個訂單多個商品:
(訂單號,商品號)->商品名稱,商品價格
訂單表:訂單號、客戶號、訂單時間
中間表:訂單號、商品號、銷售量
商品表:商品號、商品名稱、商品價格
第三範式:知足第二範式的條件下,表中字段與主鍵是直接聯繫,而非間接關聯:
例子:員工表:員工號、員工名、部門號、部門名..
員工表:員工號、員工名、部門號...
部門表:部門號、部門名稱....
5.
6.
從MySQL中導出數據:
mysqldump.exe
一、將某數據庫中的全部表導出來:
mysqldump -u 用戶名 -p 數據庫名> 路徑文件名
C:\Users\lx>mysqldump -u root -p company>C:\aa\hongqianjin.sql
Enter password: ******
C:\Users\lx>
注意:cmd 中運行,不能語句結束以後不能用;結尾
不能再數據庫中運行命令
沒有數據庫的信息,只有表的信息
二、如何以庫爲單位把數據導出來;
mysqldump -u root -p -B company>C:\aa\hongqianji1.sql
三、如何導出全部的庫:
mysqldump -u root -p -A>C:\aa\allhongqianjin.sql
四、如何導出特定庫中特定表的數據:
mysqldump -u root -p company fruits>C:\aa\fruitshongqianjin.sql
將數據導入到數據庫中
mysql.exe
五、如何以庫爲單位導入sql文件:
cmd:
mysql -u root -p<C:\aa\hongqianji1.sql
數據庫mysql內部:
source C:/aa/hongqianji1.sql
六、對於表級的備份文件:
mysql -u root -p company<c:/aa/fruitshongqianjin.sql
source c:/aa/fruitshongqianjin.sql
七、只導出數據結構,不導出數據
mysqldump -u root -p -d company >C:\aa\fruitshongqianjin1.sql
八、MySQL中用into outfile導出fruits的csv或txt文件 只導出數據,沒有字段名
SELECT * INTO OUTFILE 文件路徑 FROM 表名 +Where 條件
在mysql內部使用:
select * into outfile 'c:/aa/fruits2.csv'
fields terminated by ','
optionally enclosed by '"'
lines terminated by '\r\n'
from fruits;
select * into outfile 'C:/bb/fruits3.txt'
fields terminated by ','
optionally enclosed by '"'
lines terminated by '\r\n'
from fruits;
九、導出爲txt的文件:
select * into outfile 'c:/users/fruits.txt'
fields terminated by','
optionally enclosed by '"'
lines terminated by '\r\n'
from fruits;
where fs_id between 101 and 109;
十、將csv或txt文件導入到數據庫中
Load data infile 文件路徑 into table 數據表
load data infile 'C:/bb/fruits3.txt' into table fruits
character set gbk
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\r\n';
Load data infile 'c:/aa/fruits2.csv' into table fruits
character set gbk
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\r\n';
導出csv和txt文件時,格式要定義好,
fields terminated定義字段終止用什麼來區分,咱們用的是「,」來區分的,optionally enclosed by’」’表示把數據文件中的字符
串加雙引號「 " 」來封閉,escaped by用來規定轉義字符。
,lines terminated 表示換行。
7.
一、絕對值ABS:求2,-3.3和-33的絕對值,輸入語句以下:
select abs(2),abs(-3.3),abs(-33);
二、求餘數MOD(X,Y):對MOD(31,8),MOD(234, 10),MOD(45.5,6)進行求餘運算,輸入語句以下:
select mod(31,8),mod(234,10),mod(45.5,6);
三、返回最小整數CEILING:使用CEILING函數返回最小整數,輸入語句以下:
select ceiling(45.34),ceiling(-45.34);
四、使用ROUND(x)函數對操做數進行四捨五入操做,輸入語句以下:
select round(45.34),round(45.56,1),round(45.56,0),round(45.56,-1);
五、使用CHAR_LENGTH函數計算字符串字符個數,輸入語句以下:
select char_length('football'),length('football');
六、使用CONCAT函數鏈接字符串,輸入語句以下:group_concat()
select concat('my','sql');
select fs_id,group_concat(f_name) from fruits group by fs_id;
七、使用LEFT函數返回字符串中左邊的字符,輸入語句以下:
select left('football',4) ;
八、使用RIGHT函數返回字符串中右邊的字符,輸入語句以下:
select right('football',4);
九、使用MID()函數獲取指定位置處的子字符串,輸入語句以下:
select mid('football',4) f1 ,
mid('football',-4)f2 ,
mid('football',5,3) f3,
mid('football',-5,3) f4;
十、使用LOCATE,POSITION,INSTR函數查找字符串中指定子字符串的開始位置,輸入語以下:
select locate('ball','football'),position('ball' in 'football'),instr('football','ball');
十一、使用FIND_IN_SET()函數返回子字符串在字符串列表中的位置,輸入語句以下:
select find_in_set('ba','ball,my,sql,ba,bae');
十二、使用ifnull()函數對null空值進行判斷,若是爲空,輸出第二個值。
select ifnull(null,2),ifnull(4,2);
1三、使用日期函數current_date()獲取系統當前日期,輸入語句以下:
select current_date(),curdate();
1四、使用時間函數current_time()獲取系統當前時間,輸入語句以下:
select current_time(),curtime();
1五、使用日期時間函數current_timestamp(),localtime(),now(),sysdate()獲取當前系統日期和時間,輸入語句以下:
select current_timestamp(),localtime(),now(),sysdate();
1六、使用MONTH()函數返回指定日期中的月份,輸入語句以下:
select date(now()),year(now()),month(now());
1七、使用MONTHNAME()函數返回指定日期中的月份的名稱,輸入語句以下:
select monthname(now());
1八、查詢兩個日期相差幾天datediff(時間1,時間2);
select datediff('2017-02-25','1989-03-26');
1九、對時間進行更新可以使用date_add(date,interval expr type)和date_sub()函數;
select date_add('2017-02-25',interval 5 day) f1,
date_add('2017-02-25',interval 5 week) f2,
date_add('2017-02-25',interval 5 month) f3;
8.
9.
10.影響無線搜索的十大權重
11.
查看是不是utf8:
show variables like '%cha%';
12.
rollup的使用方法:
一、建立表格tb_1:
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| s_id | char(8) | NO | PRI | NULL | 供應商 |
| f_name | char(20) | NO | PRI | NULL | 水果名 |
| f_price |float(8,2)| NO | | NULL |水果價格|
| f_no | int(4) | NO | | NULL |銷售數量|
+---------+----------+------+-----+---------+-------+
create table tb_1
(s_id char(8) not null ,
f_name char(20) not null,
f_price float(8,2) not null,
f_no int(4) not null,
primary key(s_id,f_name));
二、在表格tb_1中插入一下數據:
+------+--------+---------+------+
| s_id | f_name | f_price | f_no |
+------+--------+---------+------+
| 001 | apple | 3.5 | 3 |
| 001 | banana | 3.5 | 2 |
| 001 | orange | 4.5 | 4 |
| 002 | apple | 3.3 | 5 |
| 002 | banana | 3.8 | 0 |
| 002 | orange | 4.7 | 3 |
+------+--------+---------+------+
insert into tb_1
values('001','apple',3.5,3),
('001','banana',3.5,2),
('001','orange',4.5,4),
('002','apple',3.3,5),
('002','banana',3.8,0),
('002','orange',4.7,3);
五、按照供應商來查詢表中水果的總銷售額:
select s_id,f_name,sum(f_price*f_no) as 銷售額 from tb_1 group by s_id,f_name with rollup;
存儲過程:
查詢fruits信息的存儲過程;
select * from fruits
where fs_id=102;
delimiter //
create procedure 過程名(參數)
begin
SQL 語句;
end;//
create procedure pro1(in x int)
begin
select * from fruits
where fs_id=x;
end;//
調用存儲過程:
call 存儲過程名(參數);
call pro1(105);
參數 :in|out|inout 參數名 數據類型
create procedure pro2( in pro_in int)
begin
select pro_in;
set pro_in=3;
select pro_in;
end;//
set @x=1;
select @x,@y;
call pro2(@x)// 1 3
select @x// 1
create procedure pro3( out pro_in int)
begin
select pro_in;
set pro_in=3;
select pro_in;
end;//
create procedure pro3( out pro_in int)
begin
select pro_in;
set pro_in=3;
select pro_in;
end;//
set @x=1;
select @x,@y;
call pro2(@x)// null 3
select @x// 3
定義變量:
declare 變量名 數據類型 初始值
create procedure pro4( in x int)
begin
case
when x=1 then select 1;
when x=2 then select 2;
else select 3;
end case;
end;//
if:
create procedure pro5(in x int)
begin
if x=1 then select 1;
elseif x=2 then select 2;
else select 3;
end if;
end;//
while:
1+2+3+....=5050
create procedure pro6(out z int,in y int)
begin
declare i int default 1;
declare s int default 0;
while i<=y do
set s=s+i;
set i=i+1;
end while;
set z=s;
end;//
call pro7(@z,50)
drop procedure pro5;//刪除存儲過程
查詢有哪些存儲過程
show procedure status;
13.
索引:
設有N條隨機記錄,不用索引,平均查找N/2次。
若是使用索引後呢?
btree(二叉樹)索引
log以2爲底N的對數次
hash(哈希)索引:1次(理論上)
創建數據表books_1,在pubdate上創建普通索引,數據以下
字段名 數據類型 主鍵 外鍵 非空 惟一 自增 索引
b_id int(11) 是 否 是 是 否 否
b_name varchar(50) 否 否 是 否 否 否
author varchar(100) 否 否 是 否 否 否
price float 否 否 是 否 否 否
pubdate year(4) 否 否 是 否 否 普通索引
note varchar(100) 否 否 是 否 否 否
num int(11) 否 否 是 否 否 否
SQL語句以下:
二,在已經存在的表上建立索引;
alter table fruits add index(f_name) ;
create index if_name on fruits(f_name);
三,刪除索引
alter table fruits drop index f_name;
drop index if_name on fruits;
視圖:
視圖是由查詢結果造成的一張虛擬表,表格數據的更新,視圖顯示的數據也會同時更新,可是,視圖的增刪改一樣會修改表中的數據(只有一一對應的時候才能夠修改)。
create (algorithm=merge|temptable|undefined) view 視圖名
as select 字段名 from 表名
where 條件;
merge|undefined:
create view vfruits as select * from fruits
order by f_price desc;
select * from vfruits
group by fs_id ;
select * from fruits
group by fs_id
order by f_price desc;
temptable:
create algorithm=temptable view vfruits1 as select * from fruits
order by f_price desc;
select * from vfruits1
group by fs_id ;
select * from (select * from fruits
order by f_price desc ) as vfruits
group by fs_id;
2017年2月26日
1.出庫的限制
2.
觸發器:
建立表格訂單表ts1:
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| order_id | char(10) | NO | PRI | NULL | |
| pro_id | char(10) | NO | | NULL | |
| num | int(10) | YES | | NULL | |
+----------+----------+------+-----+---------+-------+
create table ts1
(order_id char(10) not null primary key ,
pro_id char(10) not null,
num int(10) );
建立表格商品表tt1:
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| pro_id | char(10) | NO | PRI | NULL | |
| pro_name | char(10) | NO | | NULL | |
| num | int(10) | NO | | NULL | |
+----------+----------+------+-----+---------+-------+
create table tt1
(pro_id char(10) not null primary key ,
pro_name char(10) not null,
num int(10) not null);
在商品表tt1中插入數據:
create table ts1
(order_id char(10) not null primary key ,
pro_id char(10) not null,
num int(10) );
建立觸發器:
監控地點: table
監控事件: insert|update|delete
觸發時間: after|before
觸發事件: insert|update|delete
delimiter //
create trigger觸發器名
after|before insert|update|delete on 表名
for each row
begin
SQL操做語句(觸發器發生以後的操做);
end;//
一、客戶下訂單,訂單表中插入數據:('1001','1112',4),建立觸發器,要求商品表自動減去相應的商品庫存:
delimiter //
create trigger tr1
after insert on ts1
for each row
begin
update tt1 set num=num-new.num
where pro_id=new.pro_id;
end;//
show triggers;
drop trigger 觸發器名;
二、客戶取消訂單,取消訂單'1001',建立觸發器,要求商品表自動添加相應的商品庫存:
create trigger tr2
after delete on ts1
for each row
begin
update tt1 set num=num+old.num
where pro_id=old.pro_id;
end;//
delete from ts1 where order_id='1001';//
三、客戶修改訂單,將訂單'1001'的數量改成8,要求商品表的庫存自動進行相應的調整.
create trigger tr3
after update on ts1
for each row
begin
update tt1 set num=num+old.num
where pro_id=old.pro_id;
update tt1 set num=new-new.num
where pro_id=new.pro_id;
end;//
update ts1 set num=8 where order_id=1001;
四、客戶下訂單,限購要求:每種商品最多隻能購買5件,建立存儲過程,自動調整下單num和商品表相應的庫存.
create trigger tr4
before insert on ts1
for each row
begin
if new.num>5 then
set new.num=5;
end if;
update tt1 set num=num-new.num
where pro_id=new.pro_id;
end;//
insert into ts1 value('1003','1112',10);//
3.數據結構表查詢
mysql> show databases;
-> //
+--------------------+
| Database |
+--------------------+
| information_schema |
| company |
| mysql |
| performance_schema |
| t1 |
| t2 |
| test |
| test_db |
+--------------------+
8 rows in set (0.00 sec)
mysql> use information_schema ;
Database changed
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| ENGINES |
| EVENTS |
| FILES |
| GLOBAL_STATUS |
| GLOBAL_VARIABLES |
| KEY_COLUMN_USAGE |
| PARAMETERS |
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
| PROFILING |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| SESSION_STATUS |
| SESSION_VARIABLES |
| STATISTICS |
| TABLES |
| TABLESPACES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
| INNODB_BUFFER_PAGE |
| INNODB_TRX |
| INNODB_BUFFER_POOL_STATS |
| INNODB_LOCK_WAITS |
| INNODB_CMPMEM |
| INNODB_CMP |
| INNODB_LOCKS |
| INNODB_CMPMEM_RESET |
| INNODB_CMP_RESET |
| INNODB_BUFFER_PAGE_LRU |
+---------------------------------------+
40 rows in set (0.00 sec)
mysql> select * from tables where table_schema='company';
+---------------+--------------+------------+------------+--------+---------+------------+---
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TA
+---------------+--------------+------------+------------+--------+---------+------------+---
| def | company | dept | BASE TABLE | InnoDB | 10 | Compact |
| def | company | fruits | BASE TABLE | InnoDB | 10 | Compact |
| def | company | offices | BASE TABLE | InnoDB | 10 | Compact |
| def | company | person | BASE TABLE | InnoDB | 10 | Compact |
| def | company | suppliers | BASE TABLE | InnoDB | 10 | Compact |
| def | company | tb_1 | BASE TABLE | InnoDB | 10 | Compact |
+---------------+--------------+------------+------------+--------+---------+------------+---
6 rows in set (0.00 sec)
mysql> select * from columns where table_schema='company';
+---------------+--------------+------------+-------------+------------------+---------------
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | COLUMN_DEFAULT
+---------------+--------------+------------+-------------+------------------+---------------
| def | company | dept | d_no | 1 | NULL
| def | company | dept | d_name | 2 | NULL
| def | company | dept | d_location | 3 | NULL
| def | company | fruits | f_id | 1 | NULL
| def | company | fruits | fs_id | 2 | NULL
| def | company | fruits | f_name | 3 | NULL
| def | company | fruits | f_price | 4 | NULL
| def | company | fruits | num | 5 | 3
| def | company | offices | officecode | 1 | NULL
| def | company | offices | city | 2 | NULL
| def | company | offices | ads | 3 | NULL
| def | company | person | id | 1 | NULL
| def | company | person | name | 2 |
| def | company | person | age | 3 | 0
| def | company | person | info | 4 | NULL
| def | company | suppliers | s_id | 1 | NULL
| def | company | suppliers | s_name | 2 | NULL
| def | company | suppliers | s_city | 3 | NULL
| def | company | suppliers | s_zip | 4 | NULL
| def | company | suppliers | s_call | 5 | NULL
| def | company | tb_1 | s_id | 1 | NULL
| def | company | tb_1 | f_name | 2 | NULL
| def | company | tb_1 | f_price | 3 | NULL
| def | company | tb_1 | f_no | 4 | NULL
+---------------+--------------+------------+-------------+------------------+---------------
24 rows in set (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| company |
| mysql |
| performance_schema |
| t1 |
| t2 |
| test |
| test_db |
+--------------------+
8 rows in set (0.00 sec)
mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
24 rows in set (0.00 sec)
4.上庫存不能大於庫存上限
3.
4.
使用mysql數據庫,use mysql
使用mysql中的表中的user信息,有那些用戶
一、添加用戶:
create user '用戶名'@'服務器名' identified by '密碼'
create user 'hongqianjin1'@'localhost' identified by'123456';
登陸只能用cmd
C:\Users\lx>mysql -h localhost -u root -p
Enter password: ******
C:\Users\lx>mysql -h 127.0.0.1 -u root -p
Enter password: ******
C:\Users\lx>mysql -u hongqianjin1 -p
Enter password: ******
查看那些用戶
mysql> select * from user;
二、賦予用戶權限:
grant 權限 on 數據庫.數據表 to '用戶名'@'服務器名'(identified by '密碼');
grant select on company.* to 'hongqianjin1'@'localhost';
grant select,insert on *.* to 'lisi'@'localhost'identified by '123456';
所有權限:
all privileges
查看權限:
show grants for 'hongqianjin1'@'localhost';
三、取消用戶權:
revoke 權限 on 數據庫.數據表 from '用戶名'@'服務器名';
revoke select on company.* from 'hongqianjin'@'localhost';
四、刷新權限:
flush privileges;
五、刪除用戶:
drop user '用戶名' @ '服務器名';
drop user 'hongqianjin' @'localhost';
六、修改密碼:
update user set password=password('密碼')where user='用戶名'and host='服務器名';
update user set password=password('123')where user='hongqianjin1' and host='localhost';
password('123')中password是加密,去掉則不加密。
修改密碼以後,賦予權限的人須要刷新一下權限
一、添加用戶:
create user '用戶名'@'服務器名' identified by '密碼'
create mysql.user 'zhangsan'@'localhost' identified by '12345';
二、賦予用戶權限:
grant 權限 on 數據庫.數據表 to '用戶名'@'服務器名' (identified by '密碼'); *.*
grant select on company.* to 'zhangsan'@'localhost';
grant select,insert on *.* to 'lisi'@'localhost' identified by '1234';
所有權限: all privileges
查看權限:
show grants for 'zhangsan'@'localhost';
三、取消用戶權:
revoke 權限 on 數據庫.數據表 from ’用戶名'@'服務器名';
revoke select on company.* from 'zhangsan'@'localhost';
四、刷新權限:
flush privileges;
五、刪除用戶:
drop user ‘用戶名'@'服務器名';
drop user 'zhangsan'@'localhost';
六、修改密碼:
update user set password=password('密碼')
where user='用戶名' and host='服務器名';
update user set password=password('123')
where user='zhangsan';
忘記root的密碼:
C:\Users\Administrator>net stop mysql
MySQL 服務正在中止.
MySQL 服務已成功中止。
C:\Users\Administrator>mysqld -n --skip-grant-tables
打開客戶端無需密碼直接登錄;
mysql> use mysql;
Database changed
mysql> update user set password=password('880218')
-> where user='root';
Query OK, 0 rows affected (0.05 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.09 sec)
數據庫:
查看有哪些數據庫: show databases;
建立數據庫: create database 數據庫名;
建立數據庫過程: show create database 數據庫名;
刪除數據庫: drop database 數據庫名;
選擇數據庫: use 數據庫名;
數據表:
查看有哪些表: show tables;
建立數據表: create table 表名
(字段名 數據類型 字段屬性,
....
);
數據類型: 數值型: 整型:int 浮點型 : float,double,decimal
字段屬性: 主鍵: primary key 對字段具備非空和惟一的約束
惟一鍵: unique
非空: not null
自增: auto_increment
默認值:default
註釋; comment
外鍵: foreign key
普通索引:key|index
數據表結構調整:
alter table 表名 add|drop|change|rename|modify 。。。
查看錶格結構:
describe|desc 表名;
建立和表1結構相同的表:
create table 表2 like 表1;
把查詢結果保存一張表中:
create table 表2 as select * from 表1 where條件;
數據的更新:
插入數據:
insert into 表名(字段名)
values(數據1),(數據2)...;
insert into 表1(字段名)
select 字段名 from 表2
where 條件;
修改數據:
update 表名 set 字段名=數據 where 條件;
刪除數據:
delete from 表名
where 條件;
查詢數據:
select 字段名 from 表名
where 條件 (不能直接使用sum(),max(),count()等聚合函數)
group by 字段名
having 條件
order by 字段名 asc|desc
limit m,n
鏈接查詢:
select 字段名 from 表1 inner|left|right join 表2
on 表1.字段名=表2.字段名 inner join 表3 on 條件
where 條件;
嵌套查詢:
select * from (select * from fruits) as f1
where s_id in( select * from suppliers);
去重:distinct
合併查詢結果:union(去重) ,union all(不去重)
存在: exists
where s_id in(102,103);
範圍:between ...and
字符串匹配; (not) like 通配符:%, 單個字符:_
正則表達式; (not) regexp ....
存儲過程:
delimiter 符號
create procedure 過程名(in|out|inout 參數名 數據類型)
begin
declare 變量名 數據類型 默認值
SQL語句;
end;
觸發器:
create trigger 觸發器名
after|before insert|update|delete on table_name
for each row
begin
SQL語句;
end ;
開始事務:
start transaction;
SQL 語句;
rollback回滾|commit 提交;
show variables like '%autocommit%';
set autocommit=0;
5.輸入法的切換
6.篩選
2017年2月日
1.
2.
注意:若是沒有~的話,則?爲通配符,有~的話,?號表示?號自己。