MySQL學習筆記(一) 青銅

數據庫介紹


    什麼是數據庫:數據庫是是按照必定的數據結構來組織、存儲和管理數據的倉庫mysql

常見的數據庫


        Oracle
            運行穩定,可移植性高,功能齊全,性能超羣!適用於大型企業領域。
        DB2
            速度快、可靠性好,適於海量數據,恢復性極強。適用於大中型企業領域。
        MySQL
            開源,體積小,速度快。適用於於中小型企業領域。
        SQL Server
            全面,效率高,界面友好,操做容易,可是不跨平臺。適用於於中小型企業領域。sql

經常使用數據庫命令:

        建立數據庫:        create database 數據庫名稱;
        刪除數據庫:        drop database 數據庫名稱;
        查看數據庫:        show databases;
        使用數據庫:         use 數據庫名;數據庫

 

   SQL數據類型:     

數值類型:安全

字符串類型:
   日期和時間類型: 數據結構

經常使用數據類型


    double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數,即最大值爲999.99;
    char:固定長度字符串類型; char(10)  'abc       '
    varchar:可變長度字符串類型;varchar(10) 'abc'
    text:字符串類型;
    blob:二進制類型;
    date:日期類型,格式爲:yyyy-MM-dd;
    time:時間類型,格式爲:hh:mm:ss
    datetime:日期時間類型 yyyy-MM-dd hh:mm:ss函數

在mysql中,字符串類型和日期類型都要用單引號括起來。'MySql'  '2020-01-01'性能

sql功能分類:

        DDL:用來定義數據庫對象:建立庫,表,列等。spa

        DML:用來操做數據庫表中的記錄code

        DQL:用來查詢數據orm

        DCL:用來定義訪問權限和安全級別

DDL(和數據庫相關)

建立數據庫:                            create database 數據庫名  character set utf8;
修改數據庫:                            alter database 數據庫名 charactor set gbk;
添加一列:                              ALTER TABLE 表名 ADD 列名 數據類型;
修改一個表的字段類型:                   ALTER TABLE 表名 MODIFY 字段名  數據類型;
修改表名:                              RENAME TABLE 原始表名 TO  要修改的表名; 
修改表的字符集:                         ALTER TABLE 表名 CHARACTER SET 字符集名稱;
修改表的列名:                           ALTER TABLE 表名 CHANGE 原始列名 新列名 數據類型;
查看錶的字段信息:                        DESC 表名;
查看錶的建立細節:                         SHOW CREATE TABLE 表名;
刪除一列:                                 ALTER TABLE 表名 DROP 字段名;
刪除表:                                   DROP TABLE 表名;

DML(必須會寫)

DML是對錶中的數據進行增、刪、改的操做

查詢表中的全部數據:SELECT * FROM 表名;
    插入操做:INSERT INTO 表名(列名1,列名2 ...)VALUE (列值1,列值2...);
        注意事項
            列名與列值的類型、個數、順序要一一對應。
            值不要超出列定義的長度。
            插入的日期和字符同樣,都使用引號括起來。

        批量插入:INSERT INTO 表名(列名1,列名2 ...)VALUES (列值1,列值2...),(列值1,列值2...);
    更新操做:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值

把全部學生的分數改成90:update students set  score=90
把姓名爲zs的學生分數改成60:update student set score=60 where name='zs';
把姓名爲李四的年齡改成20和分數改成70:update student set age=20,score=70 where name='ls';
把wc的年齡在原來基礎上加1歲:update students set age=age+1 where name='wc';


    刪除操做
       1. DELETE FROM 表名 【WHERE 列名=值】
       2.  TRUNCATE TABLE 表名;
        
DELETED 與TRUNCATE的區別:
            DELETE 刪除表中的數據,表結構還在;刪除後的數據能夠找回
            TRUNCATE 刪除是把表直接DROP掉,而後再建立一個一樣的新表。刪除的數據不能找回。執行速度比DELETE快。

 

DQL:

查詢全部列:SELECT * FROM 表名;
    

結果集:數據庫執行DQL語句不會對數據進行改變,而是讓數據庫發送結果集給客戶端。
            1.經過查詢語句查詢出來的數據以表的形式展現咱們稱這個表爲虛擬結果集。存放在內存中。
           2. 查詢返回的結果集是一張虛擬表。
  

 查詢指定列的數據: SELECT 列名1,列表2... FROM 表名;
 
     

 //查詢性別爲男,而且年齡爲20的學生記錄
       SELECT * FROM students WHERE gender='男' AND age=20;
  //查詢學號爲1001 或者 名爲zs的記錄
       SELECT * FROM students WHERE id ='1001' OR name='zs';
  //查詢學號爲1001,1002,1003的記錄
       SELECT * FROM students WHERE id='1001' OR id='1002' OR 1001='1003';
       SELECT * FROM students WHERE id  IN('1001','1002','1003');
       select * from student where id BETWEEN 1001 and 1003;
  //查詢年齡爲null的記錄
       SELECT * FROM students WHERE age IS NULL;
  //查詢年齡在18到20之間的學生記錄
       SELECT * FROM students WHERE age>=18 AND age<=20;
       SELECT * FROM students WHERE age BETWEEN 18 AND 20;
  //查詢性別非男的學生記錄
       SELECT * FROM students WHERE gender !='男';
   //查詢姓名不爲null的學生記錄
       SELECT * FROM students WHERE  name IS NOT  NULL;

模糊查詢:

    1.根據指定的關鍵進行查詢
    2.使用LIKE關鍵字後跟通配符
    3.通配符
        _  :任意一個字符
        %:任意0~n個字符
    使用:

//查詢姓名由5個字母構成的學生記錄
	SELECT * FROM students WHERE name LIKE '_____';
	//模糊查詢必須使用LIKE關鍵字。其中 「_」匹配任意一個字母,5個「_」表示5個任意字母。
//查詢姓名由5個字母構成,而且第5個字母爲「s」的學生記錄
	SELECT * FROM students WHERE name LIKE '____s';
//查詢姓名以「m」開頭的學生記錄
	SELECT * FROM students WHERE name LIKE 'm%';
	//其中「%」匹配0~n個任何字母。
//查詢姓名中第2個字母爲「u」的學生記錄
	SELECT * FROM students WHERE name LIKE '_u%';
//查詢姓名中包含「s」字母的學生記錄
	SELECT * FROM stu WHERE name LIKE '%s%';

字段控制查詢

  • DISTINCT 去除重複記錄:                         
  SELECT DISTINCT name FROM students;
  • IFNULL把NULL轉換成數值0

SELECT *,字段1+字段2 FROM 表名;

把查詢字段的結果進行運算,必須都要是數據型,但列有不少記錄的值爲NULL,由於任何東西與NULL相加結果仍是NULL,因此結算結果可能會出現NULL。

把NULL轉換成數值0的函數IFNULL
SELECT *,age+IFNULL(score,0) FROM students;

排序

對查詢的結果進行排序:
  使用關鍵字ORDER BY

        升序ASC:從小到大  默認
        降序DESC:從大到小

//使用
	//對全部員工的薪水進行排序
		SELECT *FROM employee ORDER BY salary ASC;
	//查詢全部學生記錄,按年齡降序排序
        SELECT *FROM student ORDER BY age DESC;
	//查詢全部僱員,按月薪降序排序,若是月薪相同時,按編號升序排序
		SELECT * FROM employee ORDER BY salary DESC, id ASC;

經常使用聚合函數:

COUNT():統計指定列不爲NULL的記錄行數;
    MAX():計算指定列的最大值,若是指定列是字符串類型,那麼使用字符串排序運算;
    MIN():計算指定列的最小值,若是指定列是字符串類型,那麼使用字符串排序運算;
    SUM():計算指定列的數值和,若是指定列類型不是數值類型,那麼計算結果爲0;
    AVG():計算指定列的平均值,若是指定列類型不是數值類型,那麼計算結果爲0;

//使用COUNT
		//查詢employee表中記錄數:
			SELECT COUNT(*) AS total_record FROM employee;
		//查詢員工表中有績效的人數
			SELECT COUNT(performance)  FROM employee;
		//查詢員工表中月薪大於2500的人數:
			SELECT COUNT(*) FROM employee WHERE salary > 2500;
		//統計月薪與績效之和大於5000元的人數:
			SELECT COUNT(*)  FROM employee WHERE salary+IFNULL(performance,0) > 5000;
		//查詢有績效的人數,和有管理費的人數:
			SELECT COUNT(performance), COUNT(manage) FROM employee;
	//SUM和AVG
		//查詢全部僱員月薪和:
			SELECT SUM(salary) FROM employee;
		//查詢全部僱員月薪和,以及全部僱員績效和
			SELECT SUM(salary), SUM(performance) FROM employee;
		//查詢全部僱員月薪+績效和:
			SELECT SUM(salary+IFNULL(performance,0)) FROM employee;
		//統計全部員工平均工資:
			SELECT AVG(salary) FROM employee;
	//MAX和MIN
		//查詢最高工資和最低工資:
			SELECT MAX(salary), MIN(salary) FROM employee;
相關文章
相關標籤/搜索