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)

有很多是我复制的内容,入有侵权请与我联系,马上删除,有不对的地方欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值