SQL语言的初识

SQL

1.什么是sql

结构化查询语言:其实就是定义了操作所有关系型数据库的规则,每一种数据库的操作的方式存在不一样的地方,称为方言

2.SQL通用语法

1.SQL 语句可以单行或者多行书写,以分号结尾。

2.可以使用空格和缩进来增强语句的可读性

3.mysql不区分大小写

3.SQL的分类
DDL:Data Manipulate Language数据库定义语言(操作数据库,表)
  • 1.C:创建

    创建表:create table 表名{
       列名 数据类型 comment '注释',
       列名 数据类型
       ...
       列名 数据类型
    }
    

数据类型:
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P2NNT0ie-1652339935629)(C:\Users\HP\Desktop\1.png)]

  • 2.R:查询

    所有表:show tables
    表结构:desc 表名

  • U:修改

1.修改表名
 alter table 表名 rename to 新的表名
2.修改表的字符集合
 alter table 表名 character set 字符集名称
3.新添加一列
alter table 表名 add 列名 数据类型
4.修改列的名称 类型
alter table 表名 change 列名  新列名 数据类型  :又改类型又改名称
alter table 表名 modify 列名 新数据类型 :只改类型
5.删除列
alter table 表名 drop 列名
  • D:删除

    drop table 表名 if exists 表名 //如果存在就删除
    
DMLData Manipulate Language(增删改表中的数据)

1.添加数据

insert into 表名(列名,列名,列名)values(数据1,数据2,数据3//如果不加 列名列表 默认添加一行中所有列的数据,要写全
除了数字类型其他所有的数据类型都要加引号
-------
例如
学生表  stu_name  stu_age  stu_gender  tel
       not null   null yes  not null  
insert into 表名(stu_gender,stu_name,tel)values(数据1,数据2,数据3)   
添加的时候列名可以混乱,但是value要对应混乱的字段,不为空的必须添加,可以为空的可以选择不添加

2.修改数据

updata 表名 set age=5,name=xxx 条件(where id=xxx)
//如果不加条件默认修改所有行的age属性

3…删除数据

delete from 表名 where 条件id=1等等
DQLData Query Language(查询表中的数据)

👿查询数据,非常重要

基础查询

select 字段列表  from 表名列表 where 条件列表 group by 分组字段 having 分组后的条件 order by 排序 limit 分页限定
--------------------------------
select address from student----可能有重复的结果集,,用 
select distinct(不同的鲜明的) address from student
--------------
查询几个字段相加的和
select math+ifnull(English,0) from student //因为如果有字段为null和任何相加都为null,函数ifnull(字段名,默认值)解决了这个问题
查询结果的字段列名为 math+English或者math+ifnull(English,0),这时候可以
针对上述可以起别名 As name as可以省略

条件查询

1. where 子句后面跟条件
2.运算符,(表达式结果)
 age>=20;age>20;age=20;age!=20或者age<>20也是不等于
age>=20 AND(&&)age<=30 /**在20到30岁之间:这里是同一个字段的条件**/
或者:select * from student where age between 20 And 30
not关键字,对查询除了条件之外的
age=20 OR(||或者) age=30 /**年龄20或者30岁*/ 
或者age IN20,30)条件集合
ps:null不能使用运算符,要使用is或者is not关键字

模糊查询:
LIKE关键字
用占位符:  _:单个任意字符  %:多个任意字符  (简易的正则表达式)
查询名字以张开头的: where name LIKE '张%'
'%张%':包含张的

计算列

对于要查询的列进行处理之后再显示出来
select 30-age from student where age>20;c查询大于20岁的人距离30岁还有几年
select 2021-age from student;查询出生年份

排序查询

语法: order by 排序字段1  排序方式1
如果不写排序方式默认的方式就是升序,从小到大
/**多个排序的字段的时候,意思是如果第一排序字段相同的时候,按照后面排序方式**/
排序方式:ASC 升序,默认的
       DESC :降序

聚合查询

定义:将一列数据作为一个整体,进行纵向的计算
---------------------------------
sql函数:
  count 计算个数,统计数据条数  max,min 最大最小值  sum 计算和  avg  计算平均值,时间函数now(),sysdate()获取系统时间:在添加值的时候用values(xxx,now():获取当前时间)
  字符串函数:concat('a','b','c'):字符串的拼接  upper(字段):将字符首字母大写  substring(stu_tel,8(1开始的第几位)4(截取多少位))
  ps:select concat('a',stu_name) from student
    结果: a张三
  ------------------------------
  栗子:count(列名):计算值一列有多少条
ps:聚合函数的计算是默认排除了null值
解决方法:
  1.选择不包含非空的值
  2.ifnull函数将null值替换为指定的默认值

分组查询

语法: ground by 分组字段
2.注意  1.分组之后查询的字段:分组字段/聚合函数  写其他的没有意义
     2.wherehaving的区别
       where在分组之前进行限定,如果不满足条件,则不进行分组,having在分组之后限定,如果不满足结果,则不会被查出来
       where不可以跟聚合函数,having可以进行聚合函数的判断
       没有group by是绝对没有having-----------------------------------------------------------
例子: select * from studnet group by gender,按照性别分组查询
你会发现不论表中有多少条数据,只会查出两条,所以这个*号没有任何意义,一般查询分组字段和聚合函数
ps:select 分组字段 from student group by 分组字段:这个可以查看该分组分为了哪些组

select stu_gender,count(stu_id) from stu group by stu_gender;统计按照男女分组后每个组的人数
|stu_gender|count(stu_id)|
||   5         |
||   6         |

分页查询

语法:limit 开始的索引,每页查询的条数
开始的索引等于(当前页码-1)乘以每页显示的条数
  • DCL(权限和安全的访问)
约束
  • 概念,对表中的数据进行限定,保证数据的正确性,有效性和完整性

    分类:

    主键约束

    ----primary key
    非空且唯一,一张表只有一个字段为主键(可以是一列或者是多列)
    添加:1.创建表的时候添加约束
         2.DDL对
         alter table user
     删除:alter table 表名 drop primary key
     
     自动增长  :如果某一列是数值类型的,使用 auto_increment 可以完成值的自动增长
     添加:在创建表的时候就添加:DDL添加
     删除 alter table 表名 modify 字段 类型
    

    联合主建

    • 当一个表的一个字段不能唯一找出一组数据的时候就需要用到联合组件
    如: 学生表  id  sex  name        课程表  id  course_name 
        成绩表 学生id  课程id 分数
     这个时候学生id和课程id都不能唯一确定出来一组数据
    只有 学生id加上课程id才能唯一确定出一个分数
    
    -----
    创建:
    create table score(
       stu_id varchar(20),
       course_id int 
       score id
       primary key(stu_id,course_id)
    )
    

    非空约束

    ---- not null
    添加:1.创建表的时候添加约束
         2.DDL对
         alter table user
     删除: DDL
    

    唯一约束

    ---- unique
      唯一约束可以有null值但只能有一个   
     添加:1.创建表的时候添加约束
         2.DDL对
         alter table user 
     删除 唯一约束
     Alter table suer Drop index  唯一约束列表
    

    外键约束

    ----- foreign key
    1.在创建表的时候,可以添加外键
     create table 表名(
        ...
        外键列
        单独起一行: constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
     )
    2.创建之后添加:
    alter table 表名 add constraint 外键名称 foreign key (外键列名称) reference 主表名称(主表列名称) /*级联更新删除**/ on update(delete) cascade  
    3.删除
    alter table 表名 drop foreign key 外键名称
    ----------------------
    alter table sfz add constraint sfz_student foreign key (s_id) REFERENCES student(id)  on update cascade 
    
数据库的设计
  • 多表之间的关系

    • 分类

      1.一对一

      如身份证和人

      在这里插入图片描述
      或者不设置外键,让两个表的主键一一对应

      2.一对多

      如:部门和员工

    在这里插入图片描述

    3.多对多

    如:学生和课程

    在这里插入图片描述

在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值