欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【数据库系统原理】常用sql 操作

程序员文章站 2024-03-16 18:54:16
...

  最近查看了数据相关内容,基础知识,简单记录下。

一,数据库模式定义

1. create database  if not exists 或 create schedule 创建数据库

选择数据库:Use db_name

create database db_name if not exists

2. 选择DB    use db_name 从一个数据库跳转到另一个数据库

3.修改DB.     Alter  database/schema  db_ name

4.修改已有数据库默认字符集和校对规则

 alter database db_name  或者 alter schema  db_name 语句 ,来修改已经被创建的数据库的相关参数

5.删除DB

Drop database/schema  db_name

Drop database if exists db_name(如果不存在,就删除)

例子:drop database if exists mytest_db

二,表定义

1.创建表

 create table   tab_name  ( 字段名,数据类型[列级完整性约束条件][默认值])

create table customers
( cust_id  int  not null  auto_increment,
cust_name char(30) not null,
 cust_sex char(1) not null default 0,
cust_addres char(50) null,
primary key(cust_id))

     (1)临时表和持久表

                    create table,若添加可选项  tempopary 表示创建的为临时表

      (2) 数据类型,可以帮助正确的排序数据,并在优化磁盘使用方面起着重要作用。 因此在创建表时候,必须为每个表指定正确的数据类型和长度。

              数值类型( 整型int,浮点型 double,布尔型bool)

              日期和时间类型(日期 date,时间戳 timestamp)

              字符串类型(定长字符类型 char,变长字符类型 varchar)

              空间数据类型

     ( 3)关键字

     auto_increment 可为表中数据类型为整型的列设置为自增属性,顺序从1开始

      指定默认值, Null 值 没有值或者缺值, null  不能将null值和空串 混淆;null不是空串

      (4)主键 primary key 关键字指定主键

2.更新表   alter table 语句更改原有表结构

   (1) add column   向表中增加新列

              alter table db_name customers

              add column cust_city  char(10)  not null default '武汉' after cust_sex;

             通过关键字afer 之后,在原表 cust_sex 之后添加了字段 sust_city ,也可通过关键字 “first”添加到原表第一列。

             还可以通过add primary key子句,add Foreign key ,add index子句为原表添加一个主键,外键和索引。

     (2) change column 子句

        修改表中的名称和数据类型,可以在alter table中添加 change column 子句, 这个子句可同时修改表中指定的名称和数据类型。

        alter table db_name customers

         change column cust_sex  sex char(1) null default 'M';  将cu;st_sex 列重命名为sex,并且修改数据类型。

         更改数据类型,会丢失原有数据。

 (3) alter column

         修改删除指定列默认值

          alter table db_name customers

         alter column cust_city set default 'Beijing'

  (4)  modify column 子句

         只会修改列数据类型,不会干涉其列名

 (5)drop  column  子句

        删除数据库mysql_test 中表customers 的 cust_contact 列

        alter mysql_test customers

        drop column cust_contact

 (6)rename table  更改表的名字

        rename table  tabl_name to new_tabl_name 

         alter table mysql_test customers rename to mysql_test.backup_customers 将 customer 更改为 backup.customers

 3.  删除表

        若删除数据中已经存在的表,drop table  if exists;

 4.  查看表

       (1) 显示表的名称和显示表的结构两种情形

              show tables  显示指定数据库中存放的所有表名

              show  tables  [like pattern] 按照模糊条件查找某个表名      

        (2) 显示表的结构

         show columns  显示数据库表的结构

三,索引定义

   1.索引创建  

       (1) create index   index_name

                 create index  index_cust on mysql_test.customers (cust_name,cust_id) 根据cust_name,cust_id 创建组合索引

   2.查看已经创建的索引

           show index from mysql_test.customers

     3.索引删除

                drop index index_name on tabl_name

                index_name  索引名称 tabl_name 指定该索引在的表

                alter table  mysql_test customers.

                 Drop primarky key

                  drop index index_customers

四,数据更新

   1.插入数据 insert

    insert …..values 插入单行或多行数据

          insert into mysql_test customers values (901,'章三',“北京市”)

           insert into mysql_test customers (cust_id,cust_name,cust_sex,cust_address)

            values (0,'李四',default,'武汉市',Null)

          执行时候,最好给定列名,这样即使表结构发生了改变,insert语句仍能执行

  2.insert …….set

        直接给表中的某些列指定对应的列值,即要插入数据的列名在set子句中指定

       insert  into  mysql_test  customers  set cust.name ='栗四', cust.city='邯郸';

  3.insert…select 语句 插入子查询数据

            insert  into mysql_test customers (select * from **)

            select 从多个结果集中取出来数据,并且将这些数据作为行插入到另一个表中

2.修改数据

       update tabl_name set  cust.name ='小王', cust.city='河北' where cust.id =20

        set 子句用于指定列表中要修改的列名和列值

        update mysql_test customers set cust_address ='武汉市' where cust_name ='张三'

3.删除数据

           delete 语句删除一行或者多行数据

           delete from mysql_test customers [ where condition] [order by ] [ limit row count]

           delete form mysql_test coustomers where cust_name ='王五'

五,数据查询

      数据查询是sql语言的核心功能,也是使用最多的操作。ql查询数学理论基础关系是关系数据模型中对表对象的一组关系运算:

      数学理论: 选择,投影和连接

 having 子句必须位于group by 子句之后,并且位于order by 之前

   定义并且使用列的别名 AS子句

   【数据库系统原理】常用sql 操作

 替换查询结果集中的数据

 希望对某些列的查询分析结果,而不是由查询得到的原始具体数据。

Case 表达式
  case  
     where  条件一 then 表达式一
      where 条件二 then 表达式二
      Else 表达式
      End 
			
   select cust_name ,case where cast.sex='M' then '男' else '女' end as 性别 from   mysql_test customers;

  六,常用的聚合函数

        【数据库系统原理】常用sql 操作

(1)from子句 与多表连接查询

        连接方式,交叉连接,内连接,外连接 。交叉连接:笛卡尔积,cross join 连接两张表;

        交叉连接

             select * from. tb1 cross join tb2

              select * from tab1,tab2

          返回结果集行数=连接的两张记录行数的乘积。缺点:如果两个表中记录行数很大,那么查询结果就会非常大

         内连接

              内连接是系统默认的连接方法,所以可以省略inner,只用关键字join连接表;

              关于内连接的使用,通常有以下三种情形:

                 (1)等值连接  “===”等号连接 (2)非等值连接,使用非等号之外的其他比较运算符 (3) 自连接

          外连接,一个表与他自身连接

           外连接

                  将连接的两张表分为基表和参考表,基为基础返回满足和不满足的条件 。

         左外连接  left outer  join  或者left joni 连接,null 表示右表中没有找到左表相符的记录

         右外连接  right outer joni 或者 reght join 连接表,

(2) where子句与条件查询

      1. 判定范围

       between …. And  包含左右两个值 select * from mysql_test.customers where cust_id between 903 and 912

      2. in  范围值

     3. 判断为空

     select * from  mysql_test.customers  where  cust_contact is null ;

   4.子查询

    (1) 表子查询(2) 行子查询(3)列子查询(4) 标量子查询,子查询返回的结果集仅仅是一个值

        in 子查询,通常这里的子查询只能够返回一列数据;

        exist 判定子查询的结果集是否为空

       select studentNo,studentName form tab_student

        where studentNo in ( select studentNo from tb_score where score>80)

(3)group by 子句和分组数据

  group by 子句

       select  cust_adress,cust_sex, count(*) as '人数'  from myslq_test.customers group by cust_address,cust_sex;

 with rollup  会对group by 子句中所指定的各列再次生成汇总行。

  where 子句用于过滤数据行,having 子句过滤分组;

 having 子句条件可以包含聚合函数,where 中不可以;

  where在分组前过滤;having在分组后过滤分组

 (4)  order by 子句

(1)默认是asc,升序

 (2)对空值排序,order by 会将该空值作为最小值对待

 (3) order by 子句多一个列排序,mysql中会按照这些列从左往右所罗列的次序依次排序。

     select * from cust_name,cust_addres from mysql_test.customers group by cust.address having count(*)<3

(5)  limit语句

        SELECT * FROM area  a where a.id ORDER BY a.id LIMIT  5,3

七, 视图

  1,跟其他表的区别:

(1)不是数据库真实的表,是一张虚拟表

(2)视图的内容是由存储在数据中进行查询操作的sql语句来定义的,引用视图动态生成

  (3) 不是以数据集的形式存储在数据库中,对应的视图是由存储在视图中引用的基本表汇中

(4)用户查看存储在别处数据的一种虚拟表,自身不存储数据。

  2,优点:(1)集中分散数据 (2)简化查询语句 (3)重用sql (4) 保护数据安全,用户只授权用户使用视图权限,而不指定使用表权限,来保护数据安全性(5) 共享所需数据(6) 更改数据格式,通过重新格式化检索出的数据,并组织输出到其他应用程序中

 3, 创建

 create view view_name    as  select * from mysql_test.customers where cust_setx='M'

  drop view  if exists view_name

  alter view view_name   as select * from mysql_test.customers where cust_sex='M'

  show create view view_name 查看视图定义

4, 更新视图数据

     并不是所有的视图都能更新,只有满足条件的视图才可以进行更新,对于可更新视图,需要改视图的行和基本表之间具有

 一对一的关系。

小结:

 

相关标签: sql那些事儿