day02 表 字符串 数值 日期

1 表操作(增删查改)

1, 创建表 :CREATE TABLE person(NAME VARCHAR(20),sex CHAR(2),age INT);
2, 查看库下面的所有表: show  tables;
3, 删除表: drop table 表名;
4, 修改表名: alter table 表名 rename [to] 新表名;
5, 清空表数据: truncate 表名;
6,查看表结构:desc 表名;

//清除创建新表
TRUNCATE TABLE account;

truncate  与  delete
truncate相当于删表再重建一张同样结构的表,操作后得到一张全新表.
而delete是从删除所有的层面来操作的.
Trucate相当于把旧的表扔了重画一张,
Delete相当于用橡皮把学籍表的数据库擦掉.
如果决定全清空的下,truncate速度更快一些.

注意:
1.创建库、表名是不要使用mysql关键字或者保留字; 
2.使用mysql时出现中文乱码,创表时加入character set utf8; 
3.一般不推荐使用中文数据库; 

将数据装入表中

1, insert 插入表内容
1.1 不指定字段,必须指定全部字段的值
INSERT INTO employees VALUES 
(12, 'Mary', 18, '男', '2017-10-11', '2017-11-11', 'job', 5500, '备注');

1.2 插入指定字段的数据
INSERT INTO employees (id, NAME, age, sex)
VALUES(14, '李五', NULL , '女');

1.3一次插入多条数据
INSERT INTO employees (id, NAME, age, sex)
VALUES(15, '李五', 19 , '女'),(16, '李六', 20 , '男');

2, 加载文本文件内容到表中

文本文件内容要按照表定义的类型填写,每行包含一个记录,
用定位符(tab)把值分开,可以使用NULL值。为了在文本文件中表示这些内容,使用\N(反斜线,字母N)。

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
请注意如果用Windows中的编辑器(使用\r\n做为行的结束符)创建文件,应使用:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
    -> LINES TERMINATED BY '\r\n';

修改表头 alter用法

1:删除列
ALTER TABLE 【表名】 DROP 【列名】

2:增加列
ALTER TABLE 【表名】 ADD 【列名】 INT NOT NULL  COMMENT '注释说明'

★★★ 插入列  在已有列后面插入新列
ALTER TABLE 【表名】 ADD 【插入新列】 INT AFTER 【已有列名】;

3:修改列的类型信息
ALTER TABLE 【表名】 CHANGE 【列名】【新列名(这里可以用和原来列同名即可)】 BIGINT NOT NULL  COMMENT '注释说明'

4:重命名列
ALTER TABLE 【表名】 CHANGE 【列名】【新列名】 BIGINT NOT NULL  COMMENT '注释说明'

5:重命名表
ALTER TABLE 【表名】 RENAME 【表新名】

6:删除表中主键
Alter TABLE 【表名】 drop primary key

7:添加主键
ALTER TABLE 【表名】 ADD CONSTRAINT PK_SJ_RESOURCE_CHARGES PRIMARY KEY (resid,resfromid)

8: 添加索引
ALTER TABLE 【表名】 add index INDEX_NAME (name);

9: 添加唯一限制条件索引
ALTER TABLE 【表名】 add unique emp_name2(cardnumber);

10: 删除索引
alter table 【表名】 drop index emp_name;

查看 show

1: 查看创建表的语句
show create table temp
2: 查看表
show tables;

查询 select

1: 查询所有字段内容
SELECT * FROM temp;

2: 查询指定字段内容
SELECT id, NAME FROM temp;

3: 去除重复
SELECT DISTINCT job FROM temp;

只改变查询内容,不改变原来表中的数据
4: 查询运算 
SELECT salary*10 FROM temp;

5: 取别名
SELECT NAME AS '名字' FROM temp;
SELECT salary + 1000 , salary AS '工资' FROM temp;

条件查询 where

1: 使用where 进行 条件查询
SELECT NAME FROM temp WHERE NAME = '李四';
SELECT NAME,salary FROM  temp WHERE salary > 500;

2: 不等于
SELECT id,NAME,salary FROM  temp WHERE id != 500;
SELECT id,NAME,salary FROM  temp WHERE id <> 500;

3: 区间查询
SELECT id, NAME FROM book WHERE id BETWEEN 3 AND 7; //查询id在 3 至 7之间的内容

4: 显示多个信息
SELECT id, NAME FROM temp WHERE id IN(2,4);

5: 模糊查询
SELECT id, NAME FROM temp WHERE NAME LIKE '%李%'; //一个或多个字符
SELECT id, NAME FROM temp WHERE NAME LIKE '_李_'; //一个字符

6: 判断是否为空 null比较特殊,不能使用 =  != 来判断
SELECT id, NAME FROM temp WHERE NAME IS NOT NULL;

7: 多个条件同时成立 与
SELECT id, NAME, salary FROM temp WHERE NAME IS NOT NULL AND salary = 200;

8: 多个条件任一成立 或
SELECT id, NAME, salary FROM temp WHERE NAME IS NOT NULL OR salary = 200;

9: 多个条件不成立 非
SELECT id, NAME, salary FROM temp WHERE NOT(salary = 200);

排序 ORDER BY

1: 使用 ORDER BY 对查询结果进行排序,asc升序,desc降序,默认asc升序
SELECT id,NAME,sex,salary FROM temp ORDER BY salary DESC;

2: 排序的列名,可以是select语句指定的别名 (字符串去掉引号)
SELECT id,NAME AS 姓名,sex,salary FROM temp ORDER BY 姓名 DESC;

3: 还可以用where条件选择排序内容 ORDER BY 要放后面
SELECT id,NAME AS 姓名,sex,salary FROM temp WHERE id >= 3 ORDER BY 姓名 DESC;

更新表中的内容 updata 修改表数据

1: 使用updata语句修改表中的数据
UPDATE temp SET salary = 500; //无条件
UPDATE temp SET salary = 400 WHERE NAME = '李四'; //带条件

删除表内容 delete 修改表数据

1: 删除指定记录 如果没有where条件就全删了
DELETE FROM temp WHERE id = 5;

函数 COUNT,SUM,AVG, MAX, MIN, GROUP BY, HAVING

1: 统计所有员工id数 COUNT
SELECT COUNT(id) FROM temp;

2: 统计符合条件的员工id数
SELECT COUNT(id) FROM temp WHERE sex = '男';

3: 字段内容为null不纳入统计
SELECT COUNT(id) FROM temp;
SELECT COUNT(NAME) FROM temp;

4: 求和 SUM
SELECT SUM(salary) AS '所有员工工资总和' FROM temp;
SELECT SUM() FROM temp; //0

5: 求平均值 AVG (null不参与计算)
SELECT AVG(salary) FROM temp;
SELECT AVG(salary) FROM temp WHERE sex = '男';

6: 求最大值 MAX
SELECT MAX(salary) FROM temp;
SELECT MAX(salary) FROM temp WHERE sex = '男';

7: 求最小值 MIN
SELECT MIN(salary) FROM temp;
SELECT MIN(salary) FROM temp WHERE sex = '女';

8: 分组 GROUP BY 求男女平均工资
SELECT sex AS '性别', AVG(salary) AS '平均工资' FROM temp GROUP BY sex;

9: 分组 GROUP BY 求男女员工个数
SELECT sex AS '性别', COUNT(sex) AS '员工个数' FROM temp GROUP BY sex;

10: 分组过滤 GROUP BY ... HAVING 平均售价低于60的图书类别
SELECT class AS '图书类别', AVG(price) AS '平均售价' FROM book GROUP BY class HAVING AVG(price) < 60;

字符串函数

1: 连接字符串
SELECT CONCAT(id,NAME,author) FROM book;

2: 连接字符串 加分隔符
SELECT CONCAT_WS(' # ',id,NAME,author) FROM book;

3: 统计字符串长度 (根据字节数)
SELECT NAME, LENGTH(NAME) FROM book;

4: 统计字符串长度 (根据字符数)
SELECT NAME, CHAR_LENGTH(NAME) FROM book;

5: 字母转换小写
SELECT NAME, LCASE(NAME) FROM book;

6: 字母转换大写
SELECT NAME, UPPER(NAME) FROM book;

7: 去空格以及自定义过滤
SELECT TRIM(' abc ');  //去首尾空格
SELECT TRIM(BOTH 'x' FROM 'xxxxabcxxxx');  //自定义过滤 去掉首尾
SELECT TRIM(LEADING 'x' FROM 'xxxxabcxxxx');  //自定义过滤 去掉前面
SELECT TRIM(TRAILING 'x' FROM 'xxxxabcxxxx');  //自定义过滤 去掉后面

8: 截取字符串
SELECT LEFT('abcdefg',5); //左截取 abcde
SELECT RIGHT('abcdefg',3); //右截取 efg
SELECT SUBSTRING('abcdefg',2,3); //中间截取 bcd

9: 替换字符串
SELECT INSERT('abcdefg',2,3,'123'); //替换 a123efg

数值方法

1:四舍五入
SELECT ROUND(3.14159, 4);  //3.1416
SELECT ROUND(3.54159, 0);  //4
SELECT ROUND(163.456, -2);  //200

2:截取
SELECT TRUNCATE(3.14159, 4);  //3.1415
SELECT TRUNCATE(123.456, -2);  //100

3:取余
SELECT MOD(11, 3);  //2

4:向下取整
SELECT FLOOR(44.2); //44

5:向上取整
SELECT CEIL(44.1); //45

日期

1: 日期格式转换
SELECT DATE_FORMAT('1997-10-04 22:23:00','%H %K %I %r %T %S'); // 22 K 10 10:23:00 PM 22:23:00 00
SELECT STR_TO_DATE('04/31/2004', '%m /%d /%Y'); //2004-04-31

2: 当前时间
SELECT NOW(); //2017-11-28 17:08:15

3: 当前日期
SELECT CURDATE(); //2017-11-28

4: 当前时间
SELECT CURTIME(); //17:08:58

5: 当前月最后一天
SELECT LAST_DAY(NOW()); //2017-11-30

6:返回日期/时间单独部分
SELECT EXTRACT(YEAR FROM NOW()); //2017
SELECT EXTRACT(MONTH FROM NOW()); //11
SELECT EXTRACT(DAY FROM NOW()); //28

7: 指定日期/时间 增减
SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR); //增加1年 2018-11-28 17:13:58
SELECT DATE_SUB(NOW(),INTERVAL 1 YEAR); //减少1年 2016-11-28 17:14:52

8:两个日期相隔天数
SELECT DATEDIFF(NOW(),'1988-08-28'); //10684

空值

1:空值函数
SELECT IFNULL(1/0, 'yes');//yes
2:相当于三目运算
SELECT IF(1>2 ,2 ,3);// 3

流程控制

1:相当于 java 里的 switch
SELECT
CASE 11
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
WHEN 11 THEN '666'
ELSE 'more'
END;

2:相当于 java 里的 IF ELSE
SELECT
CASE
WHEN 1 < 0
THEN '正数'
WHEN 0 = 0
THEN 'is 0'
ELSE '负数'
END;

系统信息函数

1:获取 MySQL 版本号
SELECT VERSION();

2:服务器的连接次数
SELECT CONNECTION_ID();

3:当前数据库名
SELECT DATABASE();

4:获取用户名的函数 几种方法结果一样
SELECT USER(); 
SELECT SYSTEM_USER(); 
SELECT SESSION_USER(); 
SELECT CURRENT_USER(); 

5:获取字符集
SELECT CHARSET(NAME) FROM book; //utf8

加密函数

1: 对用户的密码进行加密,该函数是不可逆的。
SELECT PASSWORD('abc'); //\*0D3CED9BEC10A777AEC23CCC353A8C08A633045E;

2: 对普通字符串进行加密,该函数是不可逆的
SELECT PASSWORD('abc'); //\*0D3CED9BEC10A777AEC23CCC353A8C08A633045E

3: 加密函数ENCODE(str, pswd_str) 
使用pswd_str作为密码,加密str。使用DECODE()解密结果,结果是一个和str长度相同的字符串。
SELECT ENCODE('yuxiaohu', 'cry'),LENGTH(ENCODE('yuxiaohu','cry'));// ���Z>  8

4: 解密函数DECODE(crypt_str,pswd_str) 
使用pswd_str作为密码,解密加密字符串crypt_str,crypt_str是由ENCODE()返回的字符串。
SELECT DECODE(ENCODE('yuxiaohu','cry'), 'cry');//yuxiaohu

你可能感兴趣的:(day02 表 字符串 数值 日期)