MySQL基本查询语句

1 数据库入门

1.1 引入

方式一: 数据放到内存

优点:

1)擦写数据的效率很高!

缺点:

1)无法永久保存,当程序关闭了,数据丢失

方式二: 数据放到普通文件

优点:

1)可以永久保存

缺点:

1)频繁地进行IO操作,效率比较低

2)查询数据不方便的!!!

方式三: 数据放到数据库软件

优点:

    1)数据永久保存下来

2)查询数据非常方便的!!

3)效率不能低

1.2 市面上常见的数据库软件

数据库软件,存储和管理数据的仓库。

Oracle: 是甲骨文公司的产品。满足中大型应用。和java语言兼容性非常好的。

SQL Server: 是微软公司的产品。和net平台(c#语言)兼容最好。

DB2: IBM的产品。

mysql:开源的数据库产品。和java语言兼容非常好。满足中小型应用。

mangoDBnoSQL数据库

mysql: 满足中小型应用

oracle:满足中大小应用

1.3 mysql数据库基本使用

C:\Users\APPle>mysql -u root -p

Enter password: ****

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 12

Server version: 5.5.40 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

数据定义语言(DDL),例如:CREATEDROPALTER等语句。

数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。

数据查询语言(DQL),例如:SELECT语句。(一般不会单独归于一类,因为只有一个语句)。

数据控制语言(DCL),例如:GRANTREVOKE等语句。

事务控制语言(TCL),例如:COMMITROLLBACK等语句。

SQL语言包括四类种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)还有事务控制语言(TCL)。

2 管理数据库

2.1 查看所有数据库

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |         数据库的元数据

| mysql              |        数据库用户信息或软件配置信息

| performance_schema |        数据库软件运行的性能数据

| test               |        测试数据库

+--------------------+

4 rows in set (0.00 sec)

2.2 创建新的数据库

create database user;

指定字符集  create database user default character set gbk;

2.3 修改数据库

修复数据库的字符集    alter database user default character set utf8;

2.4删除数据库

drop database admin_user;

3 管理表

操作表之前,需要切换数据库:  use 数据库名称     例如  use  admin_user;

3.1 创建新的表(create table)

create table student(id int,name varchar(20),age int);

create table 表名(字段名称 字段类型,字段名称 字段类型.....);

3.2 修改表(alter table

添加字段:alter table student add column gender varchar(1);

修改字段类型:alter table student modify column gender varchar(2);

修改字段名称:alter table student change column gender sex varchar(2);

删除字段:alter table student drop column age;

修改表名称:alter table student rename to teacher;

3.3 查看表

desc student;

show tables: 查看当前数据库的所有表

3.4 删除表

drop table teacher;

4 管理数据

1.1插入数据(insert into

需求: 往学生表插入数据

INSERT INTO student VALUES(1,'张三',20);

1)插入的字段值顺序一定是按照表的字段顺序

INSERT INTO student VALUES('张三',1,20);报错

2)字段的数据一定要和值的数量要一致

INSERT INTO student VALUES(2,20); 报错

3)插入部分字段

INSERT INTO student(id,NAME) VALUES(2,'李四');

1.2 修改数据(update)

需求: 修改学生表

1)批量操作(不建议经常使用这种)

UPDATE student SET NAME='张三';

2)按条件修改,修改一个字段

需求: 修改id2的学生姓名

UPDATE student SET NAME='李四' WHERE id=2;

需求: 修改id1的学生姓名和年龄

3)修改多个字段

UPDATE student SET NAME='王五',age=40 WHERE id=1;

1.3 删除数据(delete from

 1) 全表数据删除

DELETE FROM student;

2)按条件删除数据

DELETE FROM student WHERE id=2;

3)truncate table也可以删除全表数据

TRUNCATE TABLE student;

注意:delete from truncate table 的区别?

1delete from删除全部,也可以按条件删除,但是truncate table只能全表删除,不能按条件删除

2delete from删除的数据可以回滚,truncate table删除的数据不能回滚。

3delete from不可以把自增长约束(auto_increment)重置,truncate table可以把自增长约束(auto_increment)重置

truncate table student where id=1; 错误的语法

1.4 查看所有数据(重点中的重点)

SELECT * FROM student;

5 查询数据(重点)

5.1 查询所有字段  SELECT * FROM student;

5.2 查询指定的字段  SELECT id,NAME FROM student;

5.3 查询时指定别名(AS可以省略) SELECT id AS '编号',NAME AS '姓名' FROM student;

5.4 查询时添加常量列

临时使用的列可以通过查询时动态添加进去

需求: 查询学生数据时添加一个"班级"列。值为“java就业班”

SELECT id AS '编号',NAME AS '姓名','java就业班' AS '班级' FROM student;

5.5 查询时合并列

需求: 查询每个学生的总分。

SELECT NAME AS '姓名',(servlet+mysql) AS '总成绩' FROM student;

注意: 合并列的字段必须是数值类型的字段。非数值类型合并没有效果

SELECT NAME AS '姓名',(servlet+NAME) FROM student;

5.6 查询去除重复记录

需求: 查询有哪些的地区学生

SELECT DISTINCT address FROM student;

另一种语法

SELECT DISTINCT(address) FROM student;

5.7 条件查询

1)逻辑条件: and()     or(或)

   当出现两个或两个以上的条件,那么这两个条件直接一定会存在逻辑关系。要么是与关系,要么或关系

需求:查询学生的id1,且姓名为张三的学生 

SELECT * FROM student WHERE id=1 AND NAME='张三'; -- (交集,结果数小于或等于任何一个条件的结果数)

需求:查询学生的id2,或姓名为张三的学生

SELECT * FROM student WHERE id=2 OR NAME='张三';  -- (并集,结果数一定会大于或等于任何一个条件的结果数)

2)比较条件: >  <  >=   <=  =  <>  (between and)

需求: 查询servlet分数大于80分的学生

SELECT * FROM student WHERE servlet>80;

需求:查询mysql分数小于或等于85分的学生

SELECT * FROM student WHERE mysql<=85;

SELECT * FROM student WHERE mysql<85 OR mysql=85;

需求: 查询servlet分数大于或等于80分,且小于或等于85分的学生

SELECT * FROM student WHERE servlet>=80 AND servlet<=85;

上面sql代替的语法

SELECT * FROM student WHERE servlet BETWEEN 80 AND 85; -- ..。之间(包前包后)

需求:查询年龄不等于30岁的学生

SELECT * FROM student WHERE age<>30;

3)判空条件: is null , is not null, ='' <>''

null: 表示没有数据   is null   =''

空字符:有数据      is not null     <>''

需求:查询没有性别数据的学生(数据‘男’或‘女’)

SELECT * FROM student WHERE gender IS NULL OR gender='';

需求: 查询有性别数据的学生

SELECT * FROM student WHERE gender IS NOT NULL AND gender<>'';

4)模糊条件: like

模糊替代符号:

%: 替代任意个字符

 _: 替代一个字符

需求: 查询姓‘李’的学生

SELECT * FROM student WHERE NAME LIKE '%';

需求: 查询姓名中包含‘四’字的学生

SELECT * FROM student WHERE NAME LIKE '%%';

需求:查询姓‘李’,全名只有两个字的学生

SELECT * FROM student WHERE NAME LIKE '_';

5.8 聚合查询

用于统计结果

max()  min()  avg()  count()

需求: 查询servlet的最高分

max() 取最大值

SELECT MAX(servlet) FROM student;

需求: 查询mysql的最低分

min(): 取最小值

SELECT MIN(mysql) FROM student;

需求: 查询servlt的平均分

avg(): 平均函数

SELECT AVG(servlet) FROM student;

需求:查询当前有几个学生

count(): 统计表的记录数量

SELECT COUNT(*) FROM student;

 count(id): 统计有值的id字段的数量(排除null的数据)

SELECT COUNT(id) FROM student;

使用count统计表的数据,不要使用存在null的字段

SELECT COUNT(gender) FROM student;

5.9 分页查询

limit 起始行数,查询的行数

起始行数从0开始

SELECT * FROM student;

需求:学生共20条数据,每页显示5条,共4

看第3(1115)的学生数据sqlselect * from student limit 10,5;

看第4(1620)的学生数据sql: select * from student limit 15,5;

  知道: 当前页码,每页显示条数

结论分页查询当前页数据的sqlselect * from student limit (当前页码-1)*每页显示条数,每页显示条数;

需求: 查询第1,2条数据

SELECT * FROM student LIMIT 0,2;

需求: 查询第3,4条数据

SELECT * FROM student LIMIT 2,2;

需求:查询第5,6条数据

SELECT * FROM student LIMIT 4,2;

5.10 查询后排序(order by注意:orderby一般都放在sql语句的最后

desc: 降序。数值从大到小,字母z-a

asc: 升序。数值从小到大,字母a-z

默认情况下,按照插入的顺序排序

SELECT * FROM student;

需求:按照id的升序排序

SELECT * FROM student ORDER BY id ASC;

需求: 按照servlet成绩降序排序

SELECT * FROM student ORDER BY servlet DESC;

多个排序条件的情况:先按照前面的条件排序,当出现重复记录,再按照后面的条件排序

需求: 按照age升序,按照servlet成绩升序排序

SELECT * FROM student ORDER BY age ASC,servlet ASC;

select * from student order by username asc;

5.11 分组查询(group by)

需求: 查询每个地区有多少人

预期结果:

        3

        1

SELECT address,COUNT(*) FROM student;

1)对地区进行分组   2)在分组的基础可以进行统计,统计的是每组的数据

SELECT address,COUNT(*) FROM student GROUP BY address;

需求: 统计男女的人数

注意:order by 必须放在分组之后; where条件必须放在group by分组之前

SELECT gender,COUNT(*) FROM student  WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;

5.12 分组查询后筛选(having)

需求: 查询哪些地区的人数大于2个的地区

1)查询哪些地区多少人  2)筛选人数大于2的地区

注意: having使用在group by分组之后的,对分组后的条件进行筛选

SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2 ;

6、字段类型

char(20) vs varchar(20)

char(20): 固定长度的字符串。不管实际存储的数据的大小,一定占用20个字符空间

varchar(20): 可变长度的字符串。占用的空间大小就是实际存储的数据大小。

int vs int(4)

int: 默认最多11位,长度根据实际存储的数值的长度

int(4): 固定的数组长度

CREATE TABLE test(

id1 INT,

id2 INT(4) ZEROFILL -- zerofill: 零填充

)

INSERT INTO test VALUES(1,1);

SELECT * FROM test;

date vs datetime vs timestamp

date: 日期

datetime: 日期+时间

timestamp: 时间戳,用于记录当前数据的插入或更新的时间

CREATE TABLE test_date(

date1 DATE,

date2 DATETIME,

date3 TIMESTAMP

)

INSERT INTO test_date(date1,date2) VALUES('2018-06-17 17:35:45','2018-06-17 17:35:45');

SELECT * FROM test_date;

UPDATE test_date SET date2='2018-06-17 17:40:45';

分类

数据类型

说明

数值类型

BIT(M)  bit  bit(8)

TINYINT [UNSIGNED] [ZEROFILL]  byte

BOOL,BOOLEAN   boolean

SMALLINT [UNSIGNED] [ZEROFILL] short

INT [UNSIGNED] [ZEROFILL] int

BIGINT [UNSIGNED] [ZEROFILL] long

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]  float

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] double

位类型。M指定位数,默认值1,范围1-64

带符号的范围是-128到127。无符号0到255。

使用0或1表示真或假

2的16次方

2的32次方

2的64次方

M指定显示长度,d指定小数位数

表示比float精度更大的小数

文本、二进制类型

CHAR(size) char(20)  max—255   abc            

VARCHAR(size)  varchar(20) 65535   abcde String

BLOB   LONGBLOB  大的二进制数据

TEXT(clob)          LONGTEXT(longclob)  大文本数据

固定长度字符串

可变长度字符串

二进制数据

大文本

时间日期

DATE/DATETIME/TimeStamp

日期类型(YYYY-MM-DD)  (YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳,它可用于自动记录insert、update操作的时间

猜你喜欢

转载自www.cnblogs.com/lldsgj/p/10801286.html