mysql 部分語法總結

1:quit 退出mysql數據庫服務器;
2:help 查看幫助(其他的數據庫服務器相關命令);
3:查看Mysql數據庫的版本號和服務器的當前日期select version(),current_date;
4:查看服務器中的所有數據庫show databases;
5:創建數據庫(當然,數據庫名"asb"不能是已經存在的)create database asb;
6:創建數據庫並聲明數據庫字符集create database mydb character set utf8或者create database test character set utf8 collate utf8_general_ci;
7:選用數據庫,使其成爲當前操作的數據庫use asb;成功選中後會有如下顯示:Database changed
(甚至可以在窗口命令登陸mysql數據庫的時候直接選中要操作的數據庫(當然前提是asb數據庫存在)mysql asb -u uesername -p Enter password:******)
8:查看當前所操作的數據庫名稱select database();
9:用"create table"創建表(確認是要在當前數據庫中創建,不是的話就先用'use'選中要創建表的那個數據庫)
 create table emp(emp_id varchar(6)
 -> ,emp_name varchar(10)
      -> ,emp_age int
      -> ,emp-sal int
      -> ,emp_bir date
      -> ,emp_sex varchar(5)
      -> );
      engine=innoDB default charset=utf8;
10:添加註釋comment ‘用戶id’ 列如id not not null comment ‘用戶id’
11:查看當前數據庫中的表(可以檢驗上例的"emp"表是否成功建立)show tables;
12:describe emp;也可以直接用desc代替describe(mysql中)
13:一次性插入單行或多行的格式:INSERT INTO table_name(數據表名) VALUES(值1,值2,值3...),(值1,值2,值3...);
insert into emp values
      -> ('100001','紅楓',29,8000,'1977-01-01','male');
插入多行在插入單行的基礎上用逗號把要插入的值隔開
14:查詢emp表中在1978年1月1日之後出生的select * from emp where emp_bir>'1978-01-01';查詢某個日期段的時候用between比<>效率高一點
15:用ORDER BY語句對emp表中所有員工工資高低順序查詢結果(默認是從低到高——升序)select * from emp order by emp_sal;
用DESC關鍵字來進行從高到低排序——降序select * from emp order by emp_sal desc;
16:用LIMIT查看emp表中工資收入排名前兩個員工的資料:select * from emp order by emp_sal desc limit 2;(limit在server sql中不適用,選取Persons表中頭兩條記錄
 select top 2 * from Persons)
17:查看工資排名第2到第3的員工資料:select * from emp order by emp_sal desc limit 1,2;
18:使用rand()抽樣調查,隨機抽取2個員工,查看其資料select * from emp order by rand() limit 2;可以通過YEAR()、MONTH()、DAYOFMONTH()函數來提取日期的組成元素
19:查詢7月份出生的員工資料:select * from emp where month(emp_bir)=7;
20:可以利用英文月份來查詢:select * from emp where monthname(emp_bir)="January";
21:利用TO_DAYS()函數可以查詢出職工們從出生到現在所經理的時間,單位是天數
select to_days(current_date) - to_days(emp_bir) as livingdays from emp;
22:計算從現在開始經歷100天后的日期select date_add(now(),interval 100 day);
23:計算從現在開始經歷100天前的日期select date_sub(now(),interval 100 day);
24:使用COUNT()函數計算表中的數據數目(比如emp表中的員工數目),select count(*) from emp;(如果emp中有id爲主鍵的話最好count(id)效率會高一點)
25:統計工資上5000的數目select count(*) from emp where emp_sal>5000;
26:統計男女職工數目:(GROUP BY語句分類)select emp_sex,count(*) from emp group by emp_sex;
27:使用數據統計函數(MIN(),MAX(),SUM(),AVG())
select
      -> min(emp_sal) as min_salary,
      -> max(emp_sal) as max_salary,
      -> sum(emp_sal) as sum_salary,
      -> avg(emp_sal) as avg_salary,
      -> count(*) as employee_num
      -> from emp;
有時也可以用這些關鍵字對數據庫查詢顯示的行列轉換
28:查詢emp和dept這兩個表中,員工的姓名和部門信息
select emp.emp_name,dept.dept_name from emp,dept where emp.emp_id=dept.dept_id;
29:使用DELETE語句刪除表單中的數據記錄delete from emp where emp_name='小紅';
30:使用DRO刪除數據庫drop database dt;
31:對錶重新命名alter table 數據表名 rename as 數據表的新名字;
32:給數據表增加一個字段alter table 數據表名 add 字段名稱 字段類型;在改過名的新表name中增加一個字段(id int(6))alter table name add id int(6);
33:更改已經建立的字段類型 alter table 數據表名 modify 字段名稱 字段類型;把name表中id屬性的類型改成10個長度的字符類型alter table name modify id varchar(10);
34:更新數據表 update 數據表名 set 要修改的字段=要修改的值 where 條件
35:修改表結構,改表airline 把id設成主鍵ALTER TABLE airline MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;(說明:int(11) not null auto_increment primary key 主建非空自增)
36:修改數據庫字符集
SET character_set_client = gbk;
SET character_set_connection = gbk;
SET character_set_database = gbk;
SET character_set_results = gbk;
SET character_set_server = gbk;
37:存儲過程
測試表與測試數據
CREATE TABLE TestMulToOne (
  name       VARCHAR(10),
  allTitles  VARCHAR(200)
);
INSERT INTO TestMulToOne VALUES ('張三', '程序員,系統管理員,網絡管理員');
INSERT INTO TestMulToOne VALUES ('李四', '項目經理,系統分析員');
 
 
    
  
DELIMITER //定義結束
DROP FUNCTION GetTextCount // 除去用戶定義的GetTextCount函數
/**********
-- 獲取字符串中有幾個部分.
**********/
//定義函數和字段
CREATE FUNCTION GetTextCount(pSourceText  VARCHAR(255),  pDivChar  CHAR(1))
RETURNS TINYINT
BEGIN  //函數開始
 -- 預期結果. 
 DECLARE vResult TINYINT;
 -- 當前逗號的位置.
 DECLARE vIndex INT;
 -- 前一個逗號的位置.
 DECLARE vPrevIndex INT;
 -- 結果的初始值.
 SET vResult = 1;
 -- 查詢第一個 逗號的位置.
 SET vIndex = INSTR(pSourceText, pDivChar);
 IF vIndex = 0 THEN
  -- 參數中沒有逗號,直接返回.
  RETURN vResult;
 END IF;
 -- 初始化情況,前一個逗號不存在.
 SET vPrevIndex = 0;
 -- 循環處理。
 WHILE vIndex > 0 DO
  -- 結果遞增.
  SET vResult = vResult + 1;  
  -- 前一個逗號的位置 = 當前逗號的位置
  SET vPrevIndex = vIndex;
  -- 查詢下一個逗號的位置.
  SET vIndex = LOCATE(pDivChar,  pSourceText,  vPrevIndex + 1);
 END WHILE;
 -- 返回結果.
 RETURN vResult;
END;
//函數結束
  
DROP FUNCTION GetTextValue //
/**********
-- 獲取字符串中具體某一個部分的數據.
**********/
CREATE FUNCTION GetTextValue(pSourceText  VARCHAR(255),  pDivChar  CHAR(1), pIndex  TINYINT)
RETURNS VARCHAR(255) 
BEGIN
 -- 預期結果. 
 DECLARE vResult VARCHAR(255);
 IF pIndex = 1 THEN
  SELECT SUBSTRING_INDEX(pSourceText,  pDivChar,  1)  INTO  vResult;
 ELSE
  SELECT 
   REPLACE(
    SUBSTRING_INDEX(pSourceText,  pDivChar,  pIndex),
    CONCAT(SUBSTRING_INDEX(pSourceText,  pDivChar,  pIndex - 1) , pDivChar),
    '') INTO  vResult;
 END IF;
  
 -- 返回.
 RETURN vResult;
END;
//
 
DELIMITER ;
 
/*
SELECT GetTextCount('程序員,系統管理員,網絡管理員', ',') AS Co;
SELECT 
 GetTextValue('程序員,系統管理員,網絡管理員', ',', 1) AS A,
 GetTextValue('程序員,系統管理員,網絡管理員', ',', 2) AS B,
 GetTextValue('程序員,系統管理員,網絡管理員', ',', 3) AS C;
*/
 
 
    
SELECT
 t.name,
 GetTextValue(t.allTitles, ',', MaxNum.No) AS OneTitle
FROM
 TestMulToOne t,
 (SELECT 1 No UNION ALL
  SELECT 2 No UNION ALL
  SELECT 3 No UNION ALL
  SELECT 4 No UNION ALL
  SELECT 5 No ) MaxNum
WHERE
 GetTextCount(t.allTitles, ',') >= MaxNum.No
ORDER BY
 t.name;
  
+------+------------+
| name | OneTitle   |
+------+------------+
| 張三 | 系統管理員 |
| 張三 | 網絡管理員 |
| 張三 | 程序員     |
| 李四 | 系統分析員 |
| 李四 | 項目經理   |
+------+------------+

5 rows in set (0.00 sec)

有很多是我複製的內容,入有侵權請與我聯繫,馬上刪除,有不對的地方歡迎指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章