1. 程式人生 > 其它 >C/C++程式設計:變長陣列

C/C++程式設計:變長陣列

#SQL基礎

ddl學習
1. 操作資料庫
  1. C (Create):建立

    • 建立資料庫

      create databases 資料庫名;
      
    • 建立資料庫前先判斷是否存在

      create database if not exists 資料庫名;
      
    • 建立資料庫,判斷是否存在,並指定字符集

      create database if not exists 資料庫名  character set 字符集
      
    • 練習:建立資料庫db1 ,判斷是否存在,並指定字符集為utf8

      create database if not exists db1 character set utf8;
      
  2. R (Retrieve):查詢

    • 查詢所有資料庫的名稱

      show databases;
      
    • 查詢某個資料庫的字符集–其實是查詢資料庫的建立sql語句

      show  create database db1(資料庫名);
      
  3. U(Update):修改

    • 修改資料庫的字符集

      alter database db1(資料庫名) character set utf8(字符集);
      
  4. D(Delete):刪除

    • 刪除資料庫

      drop database db1(資料庫名);
      
    • 刪除資料庫前先判斷是否存在

      drop database if exists db1(資料庫名);
      
  5. 使用資料庫

    • 查詢當前正在使用的資料庫名稱

      select database();
      
    • 注意 和 show databases;的細微區別

      1. 語義不同,分別是:檢視所有資料庫名稱,檢視當前正在使用的資料庫名稱
      2. 寫法不同,database() 和 databases 
      
    • 使用資料庫

      use db1(資料庫名);   
      
2. ddl操作表
  1. 查詢

    1. 查詢某個資料庫中所有的表名稱

      show tables;
      
    2. 查詢表結構

      desc 表名;
      
    3. 查詢表的建立語句

      show create table 表名;
      
  2. 建立

    建立表

        create table 表名(
            列名1  資料型別1,
            列名2  資料型別2,
            ......
            列名n 資料型別n
        );
    
        注意:最後一列,不需要加逗號
    

    畫圖,理解什麼是表

    資料型別
    1. int 整數型別
    age int
    2. double 小數型別
    score double(5,2) 總長度5,小數點後的位數2,最大值999.99
    3. date 日期,只包含年月日,yyyy-MM-dd
    4. datetime 日期,包含年月日和時分秒 yyyy-MM-dd HH:mm:ss
    5. timestamp 時間戳,包含年月日和時分秒 yyyy-MM-dd HH:mm:ss
    如果該型別欄位沒有賦值,或賦值為null,則預設使用當前系統時間填充
    6. varchar 字串(長度可變)
    7. char字串(長度固定)
    name varchar(20) 表示姓名最長20個字元的限制 
    
    注意:
    1.字串varchar和小數double都要指定長度
    2.varchar和日期型別的資料要加上引號(推薦使用單引號)
    
    

    練習:建立一個學員表

    	create table student(
    	id int,
        name varchar(10),
        age int,
        score double(4,1),
        birth date,
        insert_time timestamp
    );
    
    案例:
    1.建立一個員工表employee,需要如下欄位:
    員工編號,姓名,性別,年齡,工齡,生日,工資
    
    create table employee(
        id int, -- 員工編號
        name varchar(20),-- 姓名
        gender char(1),-- 性別
        age int,-- 年齡
        work_years int,-- 工齡
        birth date,-- 生日
        salary double(8,2) -- 工資
    );
    

    複製表

    create table 表名 like 被複制的表名;
    
  3. 刪除表

    1. drop table 表名
    2. drop table if exists 表名
    
  4. 修改

    1.修改表

    • 修改表名

       alter table 表名 rename to 新表名
      
    • 修改表的字符集

      -- 查看錶的字符集,其實是查看錶的建立語句
      show create table 表名;
       -- 修改表的字符集
      alter table 表名 character set 字符集;
      

2.修改列

  • 新增一列

    alter table 表名 add 列名 資料型別;
    
  • 修改列型別

     alter table 表名 modify 列名 資料型別;
    
  • 修改列名和型別

    alter table 表名 change 舊列名 新列名 資料型別;
    
  • 刪除列

    alter table 表名 drop 列名;
    

綜合練習:

1.檢視當前的伺服器一共有多少個數據庫 show databases;
2.檢視當前正在使用的資料庫         select database();
3.選定其中的一個數據庫,進行使用     use db3;
4.檢視當前庫中有多少個表           show tables;
5.建立一個表
    create table employee(
        id int, -- 員工編號
        name varchar(20),-- 姓名
        gender char(1),-- 性別
        age int,-- 年齡
        work_years int,-- 工齡
        birth date,-- 生日
        salary double(8,2) -- 工資
    );
6.修改表:
	1.修改員工表employee名為emp
    2.修改表的字符集為gbk,查看錶的字符集
    3.修改表的字符集為utf8,並查看錶的字符集
    4.新增'部門'列
    5.修改'性別'列型別為varchar(6) 
    6.修改gender為sex,型別為varchar(6)
    7.刪除'部門'列
  • 圖形化介面工具 SQLyog
    • 演示安裝和連線,寫sql語句並執行
    • 調節字型大小
dml學習
  1. 新增資料
  • 新增全部欄位

    insert into 表名 (列名1,列名2,...列名n) values (值1,值2,...值n);
    
    注意:
    1.值要和列名要一一一對應,有幾個列就要有幾個值
    2.新增全部欄位資料時,列名部分可以省略,即:
         insert into 表名 values (值1,值2,...值n);
    
  • 新增部分欄位

    insert into 表名 (列名1,列名2,列名3,...) values (值1,值2,值3,...);
    
    注意:
    1.值必須和列名對應
    2.列名可以不是連續的
    3.列名可以不按照表結構中的順序,但通常建議按照先後順序
    4.新增部分欄位時,列名不能省略
    5.沒有新增資料的欄位預設使用null填充
    
  • 批量新增資料

    隨堂測試:
    1.向員工表中新增3名員工資訊:
    	2 張三  25歲,男
    	3 李四  26歲,男
    	4 王五  27歲,女
    
    -- 分析:屬於新增部分欄位 
    insert into emp (id,name,age,sex) values
    (2,'張三',3,'男'),(3,'李四',26,'男'),(4,'王五',27,'女')
    
    -- 批量新增語法
    insert into 表名 (欄位1,欄位2,...) values (值1,值2,...),(值1,值2,...),(值1,值2,...)
    
  • 注意:

    新增資料值時,除了數字型別,其它型別需要使用引號(單雙引號都可以),建議使用單引號。
    
  1. 刪除資料
  • 刪除滿足條件的資料

    delete from 表名 [where 條件];
    
    注意:
    1.如果不加條件,則刪除表中所有的資料
    
    eg:
    delete from emp1;
    delete from emp1 where true; 
    delete from emp1 where 1=1;
    
  • 刪除表中的所有資料

    truncate table 表名;
    
    兩種刪除所有資料的方法:
    1.truncate方式,先刪除整個表,再建立一張同樣結構的表,執行效率高,推薦使用。
    2.delete from 表名 ,不帶條件,有多少條記錄就會執行多少次刪除操作,效率不高,不推薦。
    
  1. 修改資料
  • 語法

    update 表名 set 列名1=值1, 列名2=值2, ... [where 條件];
    
    注意:
    1.如果不帶條件,則會修改所有的資料
    
    隨堂測試:
    1.曹操的年齡加1歲,工資漲500
    UPDATE emp SET age=age+1,salary =salary+500 WHERE name='曹操';
    
    2.修改所有員工的部門三國
    update emp set dept='三國';
    
dql學習
  • 完整的查詢語法

    select
    	欄位列表
    from
    	表名列表
    where
    	條件列表
    group by
    	分組欄位
    having
    	分組之後的條件
    order by
    	排序
    limit
    	分頁限定
    
1. 基礎查詢
  1. 多個欄位查詢

    select 欄位名1,欄位名2... from 表名;
    
    注意: 如果查詢所有欄位,則可以使用*來替代欄位列表。
    
  2. 去除重複

    關鍵字 distinct 
    直接放在select後面
    
  3. 四則運算

    一般可以使用四則運算計算一些列的值。(一般只會進行數值型的計算)
     ifnull(表示式1,表示式2):null參與的運算,計算結果都為null
    	 表示式1:哪個欄位需要判斷是否為null
    	 如果該欄位為null後的替換值。
    

    案例:計算學員的英語和數學成績和

    select math,english,ifnull(math,0)+ifnull(english,0) from stu;
    
  4. 起別名

    欄位名 後寫關鍵字 as  或省略as 直接用空格
    
2. 條件查詢
  • where和 運算子 構成查詢條件
> 、< 、<= 、>= 、= 、<>
 BETWEEN...AND  
 IN( 集合) 
 LIKE:模糊查詢
 佔位符:
     _:單個任意字元
     %:多個任意字元
 IS NULL  
 and  或 &&
 or  或 || 
 not  或 !
  • 案例
-- 建立表
CREATE TABLE student (
id INT, -- 編號
NAME VARCHAR(20), -- 姓名
age INT, -- 年齡
sex VARCHAR(5), -- 性別
address VARCHAR(100), -- 地址
math INT, -- 數學
english INT -- 英語
);
-- 填充資料
INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES 
(1,'馬雲',55,'男','杭州',66,78),
(2,'馬化騰',45,'女','深圳',98,87),
(3,'馬景濤',55,'男','香港',56,77),
(4,'柳巖',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'劉德華',57,'男','香港',99,99),
(7,'馬德',22,'女','香港',99,99),
(8,'德瑪西亞',18,'男','南京',56,65);



-- 查詢年齡大於20歲
	SELECT * FROM student WHERE age > 20;		
	SELECT * FROM student WHERE age >= 20;
			
-- 查詢年齡等於20歲
	SELECT * FROM student WHERE age = 20;
			
-- 查詢年齡不等於20歲
	SELECT * FROM student WHERE age != 20;
	SELECT * FROM student WHERE age <> 20;
			
-- 查詢年齡大於等於20 小於等於30			
	SELECT * FROM student WHERE age >= 20 &&  age <=30;
	SELECT * FROM student WHERE age >= 20 AND  age <=30;
	SELECT * FROM student WHERE age BETWEEN 20 AND 30;
			
-- 查詢年齡22歲,18歲,25歲的資訊
	SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
	SELECT * FROM student WHERE age IN (22,18,25);
			
-- 查詢英語成績為null
	SELECT * FROM student WHERE english = NULL; -- 不對的。null值不能使用 = (!=) 	
	SELECT * FROM student WHERE english IS NULL;
			
-- 查詢英語成績不為null
	SELECT * FROM student WHERE english  IS NOT NULL;
	SELECT * FROM student WHERE NOT english  IS  NULL;
3. 模糊查詢
  • 使用關鍵字 like

    萬用字元:
    _ 匹配一個字元
    % 匹配0-n個字元