数据库MySQL---基础语法

数据库----基础应用

1.概述

把数据存储到一个容器里,组织数据,存储数据,管理数据的仓库。

关系型数据库:数据间有关联关系的

​ 特点:数据以表格的形式出现

​ 每行为各种记录

​ 每列为字段所对应的数据域

​ 许多的行和列组成一张表单

​ 若干的表单组成数据库

​ 具体有:Oracle、MySQL、

​ 常用术语:

​ 1.数据库是一些关联表的集合

​ 2.数据表:表是数据库的基本组成单元,数据的矩阵,所有的数据都已表格的形式组织。

​ 3.列:一列数据元素包含了相同类型的数据====字段

​ 4.行:一行(记录)是一组相关的数据,某条记录的具体信息====数据/记录

​ 5**.主键:主键是唯一的,一个数据表中只能有包含一个主键,可以使用主键查询数据**

​ 6.外键:外键用于关联两个表


2.MySql

1.概述

存储和管理(行和列的表格)关系型数据

2. SQL语言(不区分大小写)

结构化查询语言,是一种特殊目的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

标准的SQL适合于所有的数据库产品。

DBMS负责执行SQL语句,通过执行SQL语句操作DB中的数据。

3.数据库的操作

所有的数据库名,表名,表字段都是区分大小写的,输入SQL命令是要注意。

a.操作数据库

a. 1 创建数据库

create		database		数据库名;

a. 2 删除数据库:

drop			database		数据库名;

a. 3展示所有数据库

show     databases	; 

(MySQL的命令,不是SQL语句)

a. 4 选择数据库

在用 SQL 语句新建表之前,要选择数据库,即确定表是往哪个数据库里创建。

use 			数据库名;

(MySQL的命令,不是SQL语句)

b.操作表

b. 1 创建表

create 	table 	表名 (

		 字段名称1		字段类型 (最大长度),

		 字段名称2		字段类型 (最大长度),

);

数据库里的字符串类型为 ---- varchar

b. 2 展示数据库里的所有表

show		tables ;		

(MySQL的命令,不是SQL语句)

b. 3 删除表

drop	table		表名 ;

用工具写sql语句,每条语句后面加分号,表示一条语句的结束,就可以选中后多行执行,

若不加分号则表示语句没有结束,多行选择执行会发生错误,只能一行一行执行。

**b. 4  查看表结构**

​ 不看表中的数据,只看表的结构

desc 表名;
c. 数据的操作

c. 1新增数据:

默认向表里的每个字段都赋值:

insert 	into		表名		values(字段1的值,字段2的值,字段3的值);

​ 插入数据,括号里需要指定每个字段的值,而且,值的顺序要和字段的顺序一致

字符串类型的数据插入时要用一对英文单引号引起来。

向表里指定字段赋值:

(注意: 指定字段 不论只有一项还是多项,都要加括号,要赋的值无论几项也要加括号)。

insert	into	表名	(指定字段1,指定字段2values	(字段1的值,字段2的值);

c .2 查询数据:

​ 查询表的所有列的数据

select 	*	from 	表名;

​ 查询表的指定列(字段)的数据

select	字段1,字段2  	from	表名;

c . 3 修改/更新数据

​ 未加修饰,会把表中某一字段的所有值都修改为设置的值。

update	表名		set	字段 = 设置的值;
**c . 3 删除数据**

	  未加修饰,会删除表里的所有数据/记录:
delete	from 	表名;

4.数据类型(描述字段):

1.命名规则:

​ 字段名必须以字母开头

​ 长度不能超过30个字符

​ 不能使用保留字

​ 只能使用大写字母,小写字母,数字,_ ,$

​ 多个单词用下划线隔开

2.字符类型:

char:括号内是代表的字符个数长度固定,不足时使用空格填充,查询效率高

varchar:括号内是代表的字符个数长度可变,实际存几位,就占几位,节省空间,查询效率低

3.数字类型:

int、int(3) oracle不支持,其使用number替代

numeric(5,2) 3位整数,2位小数

decimal和numeric日常理解为等效

4.日期类型:

date:包含年 ,月 ,日

time:包含时 ,分 ,秒

datetime:包含年 ,月 ,日 ,时 ,分 ,秒

timestamp:时间戳,不是日期,是从1970.01.01到指定日期的毫秒数。


5.字段约束:

1.主键约束:

**primary key,**如果为一个列添加了主键约束,这个列就是主键。

被设为主键的字段,值唯一且不能为空。

**使用:**在创建表时,声明字段名称,字段类型后,添加 primary key。

主键是唯一的,用过以后要不会再用,就算是删除里记录以后,也不会使用被删除的记录的主键。

2.非空约束:

not null ,如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复。

**使用:**在创建表时,声明字段名称,字段类型后,添加 not null

3.唯一约束:

unique, 如果为一个列添加了唯一约束,那么这个类的值就必须是唯一的,不能重复的,但可以为空。

**使用:**在创建表时,声明字段名称,字段类型后,添加 unique

例子:

CREATE TABLE  tb_user(
		id INT(10) PRIMARY key ,
		username VARCHAR(50) not null UNIQUE,
		sex  VARCHAR(30),
		phone VARCHAR(11) not NULL,
		age int(3),
    	price double (10)
	);
	
insert INTO  tb_user VALUES  (1,'jane','female','010-01200',18.56);

insert INTO  tb_user VALUES  (2,'jack','male','010-01201',19,79.54);

INSERT into  tb_user VALUES  (3,'rose','female','010-01202',22,21.33);

INSERT into  tb_user VALUES  (4,'jennie','female','010-01203',23,100.18);

INSERT into  tb_user VALUES  (5,'mark','male','010-01204',18,99.7);

6.基础函数:

单行处理函数:一行一行处理,一个输入,一个输出

  1. upper( ):

    括号内填写指定字段名,将指定字段的值都转换为大写

  SELECT  username , UPPER  (username)  
  from   tb_user  ;
  1. lower( )

    括号内填写指定字段名,将指定字段的值都转换为小写

   SELECT username,LOWER(username)
   from tb_user;
  1. length( ):

    括号内填写指定字段名,统计指定字段的每一个数据的长度

   SELECT username, LENGTH(username) 
   from tb_user;   
  1. substr( ):

    截取子串,将指定字段的每一个数据都截取一个子串,

    括号内有三个参数:指定字段,开始位置,截取长度。

    注意:此处的位置下标是从 1 开始的。

  SELECT username ,SUBSTR(username, 2,2) 
   from tb_user;
  1. concat( ):

    在指定字段的每一个数据后,拼接上指定的数据

    括号内有两个参数:指定字段名,要拼接的指定数据(可以不是字符串类型)

   SELECT username ,CONCAT(username,'LOVE')
   FROM tb_user;
  1. replace( ):

    将指定字段的每一个数据里字符替换成另一个字符。

    括号里有三个参数:指定字段名,替换前的字符,想要替换成的字符。

   SELECT username ,REPLACE(username,'a','e')
   from tb_user;
  1. round( ) , ceil ( ) , floor( )

    round( ) :四舍五入取整,括号内填写指定字段名

    round ( ) : 四舍五入,括号有两个参数:指定字段,保留几位小数

   SELECT price ,ROUND(price),ROUND(price,1) 
   from tb_user;

ceil ( ) :向上取整,括号内填写指定字段名

floor ( ):向下取整,括号内填写指定字段名

SELECT price ,CEIL(price),floor(price) 
from tb_user;
  1. now( ) , curdate ( ) , curtime ( )

    ​ now( ) :获取当前时间

    ​ curdate ( ) :获取当前时间的年月日

    ​ curtime ( ) :获取当前时间的时分秒

   SELECT NOW(),CURDATE(),CURTIME();
   
  1. **year( ) month( ) day( ) **

    **hour( ) minute( ) second( ) **

    从获取到的时间里,解析出年,月,日,时,分,秒

   SELECT YEAR(NOW()),MONTH(NOW()),DAY(NOW()),
   				HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());

10.转义字符

有些字符在SQL语言中有特殊的含义,但是但向使用符号的一般含义时,就需要进行转

select       'ab'cd' 	-- 单引号是一个SQL语句的特殊字符

select 'ab\'cd' 		--数据中有单引号时,用一个\转义变成普通字符
  1. trim( ):

    去除字符串的前后空格

SELECT * 
from tb_user 
WHERE username=TRIM('   jennie   ');
  1. rand( ):

    生成 0 ~ 1 之间的随机数

  2. case …when 1…then 2…when 3… then 4…else 5 …end

    case匹配某字段,当字段值为1时,执行2

    ​ 当字段值为3时,执行4


7.条件查询

  1. where 条件查询

在查询时,用where 加条件,过滤数据

SELECT username 
from tb_user 
where id=4;

可以有多个条件,条件间为 与关系 -------- and

​ 条件间为 或关系 -------- or

SELECT username 
from tb_user 
where id=3 or age=18;
  1. **distinct **

    使用 distinct 关键字,去除重复的记录行

   SELECT DISTINCT sex from tb_user;
  1. **like **

    用于 模糊查询, 通配符%-----代表0到n个字符,通配符下划线__------代表1个字符

   SELECT username 
   from tb_user 
   where username like '%e%';
SELECT username 
from tb_user 
where username LIKE '_a%';
  1. ​ **null **

    is null :过滤字段值为空的数据

    is not null :过滤字段值不为空的数据

  2. between and

    过滤出字段值在 … 范围之间的数据( 包含两边界)

SELECT price 
from tb_user 
where price BETWEEN 20 and 90;
  1. limit

    起分页作用

    limit 后直接跟一个数字 n: 返回查询的前 n 条

    limit 后直接跟两个数字 m , n :从第 m 条开始,展示 n 条。

    注意:limit 与后面的数字 之间 没有括号

    ​ 此时对于记录来说,是从0开始计数的

   SELECT	 * 
   from tb_user
   LIMIT 3;
SELECT *
from tb_user 
LIMIT 2,2;
  1. order by

    给数据 按指定的字段 进行 排序,默认升序 ,加 desc 后 降序

   SELECT price  
   FROM tb_user 
   ORDER BY price
SELECT price  
FROM tb_user 
ORDER BY price DESC;
  1. ifnull( )

    判断字段值是否为null,若为空,就用设置的值代替。

    括号内有两个参数:字段名 ,设置的默认值

​ 9.补充

select 后面的字段 可以进行运算,字段名自动设为整个表达式

SELECT price ,price*2	
from tb_user;

若是想给字段重新命名,就在字段名后加 AS ,再加新的字段名( AS 可以省略)

SELECT price ,price*3 AS allPrice
from tb_user;

8.聚合函数:

聚合函数/分组函数:多个输入,一个输出

分组函数必须在分组后才可以使用,如果没有具体写如何分组,默认整张表分了一个组

  1. count( )

    count( * ) / count( 1 ): 统计记录总数。

 SELECT COUNT(*) 
   FROM tb_user;

count( 字段 ):按照字段统计记录数,但只统计字段值不为null的记录。

  1. max( ) / min( )

    max( ) :求指定字段的最大值

    min( ) :求指定字段的最小值

   SELECT MAX(price),MIN(age) 
   from tb_user;
  1. sum ( ) / avg ( )

    sum ( ) :求指定字段的总和

    avg ( ) :求指定字段的平均值

   SELECT SUM(price),AVG( age)
   from tb_user;
  1. group by

    按照指定字段对进行分组,分组后进行查询

    select语句后若是有group by ,则select后只能跟:参加分组的字段 和 聚合函数

    跟其他的没有意义

  SELECT MAX(price) 
   from tb_user 
   GROUP BY age;
   
  1. having

    将分组后的数据进一步进行过滤,having不能替代where

    having只能和 group by 联合使用

SELECT age ,MAX(price) 
from tb_user 
GROUP BY age 
HAVING MAX(price)>50
关键字的执行顺序:(不可颠倒)
  1. from 从哪张表里
  2. where 先经过where条件筛选出有价值的数据
  3. group by 对这些有价值的数据进行分组
  4. having 分组之后可以使用having继续筛选
  5. select select查询出来
  6. order by 最后排序输出

where后不能使用聚合函数,因为聚合函数必须分组后才可以使用,

但是在执行where时还没有分组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值