1. 程式人生 > 資訊 >特斯拉週四釋出第三季度財報:中國市場的表現是關鍵

特斯拉週四釋出第三季度財報:中國市場的表現是關鍵

概論

一、什麼是資料庫:

資料庫就是儲存資料的倉庫,其本質是一個檔案系統,資料按照特定的格式將資料儲存起來,使用者可以對資料庫中的資料進行增加,修改,刪除及查詢操作。

二、MySQL資料庫:

MySQL資料庫. MySQL 是一種 開放原始碼 的關係型 資料庫管理 系統(RDBMS),使用最常用的資料庫管理語言-- 結構化查詢語言(SQL)進行資料庫管理。MySQL是開放原始碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。

三、Oracle資料庫:

Oracle 資料庫產品為客戶提供成本優化的高效能版 Oracle 資料庫、全球領先的融合多模型資料庫管理系統以及 In-memory、NoSQL 和 MySQL 資料庫。客戶可以在本地部署環境中通過 Oracle 公有云本地化解決方案使用 Oracle 自治資料庫,也可以在 Oracle 雲基礎設施中使用 Oracle 自治資料庫,從而簡化關係資料庫環境並減少管理工作量。

四、MySQL和Oracle的區別:

①Oracle是大型的資料庫而Mysql是中小型資料庫;

②Oracle支援大併發,大訪問量;

③安裝佔用的記憶體也是有差別,Mysql安裝完成之後佔用的記憶體遠遠小於Oracle所佔用的記憶體,並且Oracle越用所佔記憶體也會變多;

④Mysql是開源的,Oracle是收費的,且價格昂貴。

五、什麼是字符集

在計算機底層,比如說你的名字“小萌”在計算機中並不是文字的形式,而是一串二進位制數字,如“011001100110…”人類只認識文字,可惜計算機只認0和1,雙方都不能妥協,那就必須要有一個從文字到0、1的映射了。從我們可以看到的文字到0、1的對映稱為編碼,反過來從0、1到文字叫解碼。ASCII、UTF-8這些就是字符集,字符集就是字元的集合。

六、UTF-8

U:因為計算機是美國人發明的所以一開始只支援英文字元,不支援中文、韓文、日文等字元,所以為了統一世界上大多數人的字元,比如中文的GB2312,Unicode應運而生。

UTF:Unicode Transformation Formats(Unicode轉換格式)。

UNF-8:這個“Unicode轉換格式”是為了解決“碼點”在計算機儲存方式而設計的。“碼點”經過對映後得到的二進位制串的轉換格式單位稱之為“碼元”(Code Unit)。“碼點”就是一串二進位制數,“碼元”就是切分這個二進位制數的方法。舉個例子,如果有一個字元的碼點二進位制表示有n位元組(n*8個二進位制數),其碼元為8位(1個位元組),那麼其擁有碼元n個。位元組也叫位元(Byte),8bit(位)=1Byte(位元組),1024Byte(位元組)=1KB,1024KB=1MB,一個位元組等於8位二進位制,儲存一個英文字母和阿拉伯數字=2位元組,儲存一個漢字=2位元組。

七、排序規則:

排序規則:是指對指定字符集下不同字元的比較規則。其特徵有以下幾點:

①兩個不同的字符集不能有相同的排序規則。

②兩個字符集有一個預設的排序規則。

③有一些常用的命名規則。如_ci結尾表示大小寫不敏感(caseinsensitive),_cs表示大小寫敏感(case sensitive),_bin表示二進位制的比較(binary)。

八、utf-8預設的排序規則:

①utf8_general_ci 不區分大小寫,這個你在註冊使用者名稱和郵箱的時候就要使用;

②utf8_general_cs 區分大小寫,如果使用者名稱和郵箱用這個就會照成不良後果;

③utf8_bin:字串每個字串用二進位制資料編譯儲存。區分大小寫,而且可以存二進位制的內容;

④utf8_general_ci校對速度快,但準確度稍差;

⑤utf8_unicode_ci準確度高,但校對速度稍慢。

建庫表

一、資料庫

1.建立資料庫

語法格式:create database 資料庫名

舉例:建立一個叫Staff的資料庫

create database Staff

2.顯示資料庫

語法格式:show databases like '%資料庫名%'

舉例:顯示Staff資料庫

show databases like '%Staff%'

3.刪除資料庫

語法格式:drop database 資料庫名

舉例:刪除已建立的Staff資料庫

drop database Staff

二、表格

1.建立表格

語法格式:create table 表名(列名1 資料型別和長度 約束條件,列名2 資料型別和長度 約束條件......)charset='utf-8;

create table test_data (Number int(255) auto_increment primary key not null , Sname varchar(255) not null,Sjob varchar(255) default null ,Sentry_date date default null,Scentre varchar(255) default null,Sdepartment varchar(255) default null,Ssalary int(255) default null,Sbonus int(255) default null,Seducation varchar(255) default null)engine=innodb DEFAULT charset=utf8;

補充:

①主鍵約束(primary key):資料唯一,且不為空。(資料唯一:同一列不能重複)

建立表時直接新增在值後加約束

單一約束:create table 表名( 列名1 列值1 primary key,...);

聯合約束:create table 表名(列名1 列值1, 列名2 列值2, .... 列名n 列值n, primary key(列名1,列名2); )

建立表後,補充約束alter table 表名 add primary key(列名1);

刪除約束:alter table 表名 drop primary key;

②非空約束:not null。

alter table 表名 modify 欄位名 欄位型別 not null;

③預設值約束:default。

新增約束:create table 表名( 列名1 列值1 約束,列名2 列值2 約束 default 預設值, .... )

alter table 表名 alter 列名 set default 預設值;

④唯一約束(unique):資料唯一,可以為null。

新增約束:create table 表名( 列名1 列值1 約束條件,列名2 列值2 unique, ....)

後期追加: alter table 表名 add unique(列名);

⑤自動增長(auto_increment(MySQL),identity(SQLServer),sequence(oracle)):資料必須為整型和主鍵,被刪除行不影響後續自增數。

2.顯示錶

show tables like '%表名%';--顯示已建立的表

desc 表名;--顯示錶的結構

Tybe:欄位表示的是列的資料型別

Null:欄位表示這個列是否為空值

key:可能看到PRI(主鍵)、MUL(普通的b-tree索引)、UNI(唯一索引)

Default:列的預設值

Extra:其他資訊

3.修改表

rename table 舊錶名 to 新表名

4.刪除表

drop table 表名

5.清空表資料:

truncate 表名

三、列(欄位)

1.修改列名:

語法格式:alter table 表名 change 列名 新列名 資料型別

舉例:將test_data表格的Sjob列名修改為job

alter table test_data change Sjob job varchar(255)

2.刪除列:

語法格式:alter table 表名 drop column 列名

舉例:刪除test_data表格的Sjob列

alter table test_data drop column Sjob

3.增加列:

語法格式:alter table 表名 add 列名 資料型別

舉例:在test_data表格裡面增加一列Sjob

alter table test_data add Sjob varchar(255)

補充:alter是資料操縱,中文解釋為改變

四、補充知識:

MySQL中預設添加了一個名為 information_schema 的資料庫,該資料庫中的表都是隻讀的,不能進行更新、刪除和插入等操作,也不能載入觸發器,因為它們實際只是一個檢視,不是基本表,沒有關聯的檔案。information_schema.schemata: 該資料表儲存了mysql資料庫中的所有資料庫的庫名

information_schema.tables: 該資料表儲存了mysql資料庫中的所有資料表的表名

information_schema.columns: 該資料表儲存了mysql資料庫中的所有列的列名

五、請寫出下列sql語句

1、建立一個名為spon的資料庫,並查詢資料庫,最後刪除資料庫。

create database spon

show databases like ‘spon'

drop database spon

2、建立一個名為test的表格,包含num、name、salary、Sdate,要求num為主鍵且自增長,name為唯一的字串,salary為不為空的整數,Sdate為預設為空的日期格式,並重新命名為demo,最後刪除表格。

create table test (num int(255) auto_increment primary key not null,name varchar(255) unique,salary int(255) not null,Sdate date default null)

rename table test to demo

drop table demo

3、請寫出在test表格中增加一個為bonus的整數字段,並修改為Sbonus,最後刪除欄位。

alter table test add bonus int(255)

alter table test change bonus Sbonus int(255)

alter table test drop column Sbonus

本次使用的資料庫表資訊如下:

test_data

test_datas

增刪改查

一、增加

語法格式:insert into 表名 (列1,列2.....,列n)values (值1,值2,.....,列n)

舉例:小紅以本科學歷從2020年11月2日入職應用研發測試部測試工程師一職,月薪資10000,年終獎8000,請將資訊錄入到test_data表格裡面。

insert into test_data (Sname,Sjob,Sentry_date,Scentre,Sdepartment,Ssalary,Sbonus,Seducation)values ('小紅','測試工程師','20201102','應用研發','測試部','10000','8000','本科')

二、修改

語法格式:update 表名 set 列1=修改的值1,列2=修改的值2..... where 列=參照值

舉例:小紅在工作中做出積極貢獻,月薪提高為12000,年終獎提高為11000。

update test_data set Ssalary=12000,Sbonus=10000 where Sname='小紅'

三、刪除

語法格式:delete from 表名 / delete from 表名 where 列=參照值

舉例:小紅離職後行政需要把小紅的資料刪除

delete from test_data where Sname='小紅'

rollback回退

四、查詢

語法格式:select * from 表名(星號(*)代表全部列的資料,也可以為列名只查詢想要的列)

舉例:總經理想檢視公司所有人的資訊

select * from test_data

舉例:總經理想檢視所有人的姓名和工資情況

select Sname,Ssalary from 表名

五、請寫出下列sql語句

1.2020年7月1日小廖從本科畢業後以月薪6000入職到營銷中心銷售部銷售一職,年終獎6000,請將資訊新增到test_data表格中。

insert into test_data (Sname,Sjob,Sentry_date,Scentre,Sdepartment,Ssalary,Sbonus,Seducation)values ('小廖','銷售','20200701','營銷中心','銷售部','6000','6000','本科')

2.小廖入職一年後,因表現好,公司領導決定要給她月薪加1000,年終獎加2000,請將資訊修改到test_data表格中。

update test_data set Ssalary=7000,Sbonus=8000 where Sname='小廖'

3.倆個月後小廖離職,行政將小廖資訊刪除,請將資訊修改到test_data表格中。

delete from test_data where Sname='小廖'

條件查詢

一、帶條件查詢(where)

語法:select 欄位列表 from 表名 where 條件表示式

1.等於查詢 =

舉例:檢視工作崗位是測試工程師的人員資訊

select * from test_data where Sjob='測試工程師'

2.不等於查詢(> ,< , >= ,<= ,!= )

舉例:檢視工資大於等於10000的員工資訊

select * from test_data where Ssalary>=10000

舉例:檢視不是應用研發中心的員工資訊

select * from test_data where Scentre!='應用研發'

舉例:檢視在2020年以後入職的員工資訊

select * from test_data where Sentry_date>'20200101'

3.指定範圍查詢 BETWEEN 值1 and 值2 和not BETWEEN 值1 and 值2

舉例:檢視年終獎金在8000到12000之間的員工資訊

select * from test_data where Sbonus BETWEEN 8000 and 12000

舉例:檢視薪資不在8000到12000之間的員工資訊

select * from test_data where Ssalary not BETWEEN 8000 and 12000

4.like模糊查詢

% 表示0個或多個字元

_表示1個字元

舉例:查詢名字裡麵包含紅的員工資訊

select * from test_data where Sname like '%紅%'

select * from test_data where Sname like '_紅%'

select * from test_data where Sname like '_紅'

5. 查詢在某個集合中 not in和in

舉例:查詢工資是8000和10000的

select * from test_data where Ssalary in(8000,10000)

6.is null 為空 is not null

舉例:檢視學歷為空的員工資訊

select * from test_data where Seducation is null

7.not 取反

舉例:檢視學歷不為空的員工資訊

select * from test_data where Seducation is not null

8.多條件查詢 and且 or 或

舉例:檢視學歷為本科,工資大於8000的員工

select * from test_data where Seducation='本科' and Ssalary>8000

舉例:檢視學歷為本科或者工資大於8000的員工

select * from test_data where Seducation='本科' or Ssalary>8000

二、子查詢

含義:查詢中巢狀查詢

語法格式:

①子查詢是一個數據,在where 子句中直接可使用={子查詢}

②子查詢是多個數據,在where子句中需要使用 列 in(子查詢)

舉例:檢視公司工資最高的員工的所有資訊。

select * from test_data where Sbonus in (select max(Sbonus) from test_data)

三、請寫出下列sql語句

1.請查詢入職日期在2019年1月1日以後的員工資訊。

select * from test_data where Sentry_date>20190101

2.請查詢入職日期在2019年1月1日至2020年12月30日之間的員工資訊。

select * from test_data where Sentry_date between 20190101 and 20201230

3.請查詢工資不在8000和10000的員工資訊。

select * from test_data where Ssalary not in(8000,10000)

4.請查詢學歷資訊為空的員工資訊。

select * from test_data where Seducation is null

5.請查詢部門裡面帶測試倆個字的員工資訊。

select * from test_data where Sdepartment like '%測試%'

6.請查詢應用研發中心測試部的員工資訊。

select * from test_data where Scentre='應用研發' and Sdepartment='測試部'

7.檢視工資最低的員工的所有資訊。

select * from test_data where Sbonus in (select min(Sbonus) from test_data)

函式

一、最大值

語法格式:select max(列) from 表名

舉例:查詢公司薪資最高的員工及其薪資

select Sname,max(Ssalary) from test_data

二、最小值

語法格式:select min(列) from 表名

舉例:查詢公司薪資最低的員工及其薪資

select Sname,min(Ssalary) from test_data

三、求和

語法格式:select sum(列) from 表名

舉例:計算公司一個月需要發多少工資

select sum(Ssalary) from test_data

四、平均值

語法格式:select avg(列) from 表名

舉例:求公司平均薪資和平均獎金

select avg(Ssalary),avg(Sbonus) from test_data

五、數數

語法格式:select count(列) from 表名

舉例:求公司總人數

select count(Sname) from test_data

六、長度

語法格式:select length(列) from 表名

length: 一個漢字是算三個字元,一個數字或字母算一個字元。

舉例:求崗位和薪資的長度

select length(Ssalary),length(Sjob) from test_data

七、取別名

語法格式:select 列 as 列別名 from test_data

舉例:查詢員工的薪資並給薪資取別名為salary

select Ssalary as salary from test_data

八、表示式

語法格式:select 列 (+-*/)數 from test_data

舉例:求公司員工的年薪(包括獎金)

select Sname,Ssalary*12+Sbonus from test_data

九、去重複

語法格式:select distinct(列) from test_data

舉例:求公司有那些中心

select distinct(Scentre) from test_data

十、升序

語法格式:select * from 表名 order by 基準列 asc

舉例:按公司薪資由低到高進行排序

select * from test_data order by Ssalary asc

十一、降序

語法格式:select * from 表名 order by 基準列 desc

舉例:按公司薪資由高到低進行排序

select * from test_data order by Ssalary desc

十二、返回指定的記錄數

語法格式:select * from 表名 limit n

舉例:按公司薪資由高到低進行排序,只顯示前3行

select * from test_data order by Ssalary desc limit 3

舉例:按公司薪資由高到低進行排序,只顯示第3行到第10行

select * from test_data order by Ssalary desc limit 2,8

舉例:按公司薪資由高到低進行排序,只顯示第10行到最後一行

select * from test_data order by Ssalary desc limit 10,-1

十三、請寫出下列sql語句

1.求應用研發的最高年終獎和最低年終獎分別是多少。

select max(Sbonus),min(Sbonus) from test_data where Scentre='應用研發'

2.計算每個員工的年薪(月薪*12+年終獎)並且取名為Year_salary。

select Sname,Ssalary*12+Sbonus as Year_salary from test_data

3.求應用研發中心總人數。

select count(Sname) from test_data where Scentre='應用研發'

4.求顯示應用研發員工薪資按降序排列的第2到第5條記錄。

select * from test_data where Scentre='應用研發' order by Ssalary desc limit 2,4

5.求每月應用研發需要發多少工資,及其平均工資。

select sum(Ssalary),avg(Ssalary) from test_data where Scentre='應用研發'

分組

一、分組

語法格式:列1,列2,聚合...from 表名 group by 列1,列2....

解釋:

1.按照欄位分組,表示此欄位相同的資料會被放到一個組中;

2.分組後,分組的依據列會顯示在結果集中,其他列不會顯示在結果集中;

3.可以對分組後的資料進行統計,做聚合運算(sum,max,min,avg);

4.聚合:在一個行的集合(一組行)上進行操作,對每個組給一個結果。

舉例:檢視每個中心有多少人

select Scentre,count(Sname)

from test_data

group by Scentre

舉例:檢視每個中心的每個部門有多少人

select Scentre,Sdepartment,count(Sname)

from test_data

group by Scentre,Sdepartment

舉例:檢視每個部門最高的工資是多少

select Scentre,Sdepartment,max(Ssalary)

from test_data

group by Scentre,Sdepartment

舉例:查詢每個部門最早入職和最晚入職的員工日期

select Scentre,Sdepartment,min(Sentry_date),max(Sentry_date)

from test_data

group by Scentre,Sdepartment

舉例:查詢每個部門工資大於8000的最早入職和最晚入職的員工日期

select Scentre,Sdepartment,min(Sentry_date),max(Sentry_date)

from test_data where Ssalary>8000

group by Scentre,Sdepartment

舉例:查詢每個部門工資大於8000的最早入職和最晚入職的員工日期,只顯示每個部門人數大於1的部門

select Scentre,Sdepartment,min(Sentry_date),max(Sentry_date)

from test_data where Ssalary>8000

group by Scentre,Sdepartment

having count(Sdepartment)>1

5.where和having區別:

having一般在group by後面,篩選完組後的資料進行二次篩選,可以用聚合函式

where在聚合前進行篩選資料,不可以用聚合函式。

二、請寫出下列sql語句

1.檢視每個中心入職最早的員工。

select Sname,Scentre,min(Sentry_date)

from test_data

group by Scentre

2.檢視每個中心一個月需要發多少工資。

select Scentre,sum(Ssalary)

from test_data

group by Scentre

3.檢視每個中心本科生和研究生總共的人數。

select Scentre,count(Sname)

from test_data where Seducation='本科' or Seducation='研究生'

group by Scentre

4.檢視每個中心本科生和研究生總共的人數,只顯示人數大於3的中心。

select Scentre,count(Sname)

from test_data where Seducation='本科' or Seducation='研究生'

group by Scentre

having count(Sname)>3

多表關聯查詢

create table test_datas (Sdepartment varchar(255) default null,dep_num int(255) not null, Sfloor varchar(255) not null,Slead varchar(255) default null)engine=innodb DEFAULT charset=utf8;

一、等值連線查詢(內連線)

語法結構:select a.*,b.* from a,b where a.sno=b.sno and a.score>60

select a.*,b.* from a join b on a.sno=b.sno where a.score>60

舉例:檢視所有的員工資訊及其中心編號、樓層和領導資訊

select test_data.*,test_datas.* from test_data,test_datas where test_data.Scentre=test_datas.centre

select test_data.*,test_datas.* from test_data join test_datas on test_datas.centre=test_data.Scentre

只顯示相交的部分

二、左右連線(外連線)

select a.*,b.* from a left join b on a.sno=b.sno where a.score>60

select a.*,b.* from a right join b on a.sno=b.sno where a.score>60

舉例:左連線查詢中心相等的倆個表格

select test_data.*,test_datas.* from test_data right join test_datas on test_datas.centre=test_data.Scentre

左連線:a表中的資料全部都顯示,而b表中的資料符合條件的才會顯示,不符合條件的會以 null 進行填充。

右連線:b表中的資料全部都顯示,而a表中的資料符合條件的才會顯示,不符合條件的會以 null 進行填充。

update test_datas set centre='製造中心' where dep_num=30

三、內連線和外連線的區別:

內連線查詢操作列出與連線條件匹配的資料行;

外連線,返回到查詢結果集合中的不僅包含符合連線條件的行,而且還包括左表(左外連線)、右表(右外連線)或兩個邊接表(全外連線)中的所有資料行。

四、左連線與右連線的區別:

相同點:都屬於外連線;

不同點:左連線以左邊表為基準表,右連線以右邊表為基準表,沒有資料則用null補充;

左連線關鍵字為left join,右連線關鍵字為right join。

五、請寫出下列sql語句

1.請寫出每個員工的領導和樓層。

select test_data.Sname,test_datas.Sfloor,test_datas.Slead from test_data,test_datas where test_data.Scentre=test_datas.centre

2.請寫出入職日期在2020年1月1日以後的員工部門編號(左連線)。

select test_data.Sname,test_datas.dep_num from test_data left join test_datas on test_data.Scentre=test_datas.centre where Sentry_date>20200101

3.請寫出部門編號大於20的員工領導資訊(右連線)。

select test_data.Sname,test_data.Scentre,test_data.Sdepartment,test_datas.Slead from test_data right join test_datas on test_data.Scentre=test_datas.centre where dep_num>20