精华内容
下载资源
问答
  • SQLite是一种嵌入式数据库,它的数据库就是一个文件,且SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程序库中,与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是...

    1.什么是SQLite数据库

    SQLite是一种嵌入式数据库,它的数据库就是一个文件,且SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程序库中,与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中的嵌入式关系型数据库;

    • SQLite遵守ACID,实现了大多数SQL标准,它使用动态的、弱类型的SQL语法;
    • SQLite作为嵌入式数据库,是应用程序,如网页浏览器,在本地/客户端存储数据的常见选择;

    2.Python操作SQLite数据库

    我们已经知道了SQLite数据库是什么了,然后我们来学习一下它的使用,我简单把SQLite的使用分为一下步骤,一起来看一下:

    首先第一步是导入sqlite3模块,sqlite3是一个与SQLite交互的库;
    然后需要创建一个访问数据库的连接,比如我们创建一个测试用的数据库,命名为test.db;

    • 连接数据库,没有数据库会自动创建数据库
    import sqlite3
    conn = sqlite3.connect('./test.db')
    
    • 现在我们就已经连接到数据库了,然后需要创建游标也就是Cursor;
    cursor = conn.cursor()
    
    • 通过Cursor执行SQL语句,然后获得执行结果,我们先来创建一个students表;
    sql = 'create table students(id int primary key, name varchar(20) not null , age int not null)'
    cursor.execute(sql)  # 创建表的命令
    
    • 最后一定要记得关闭游标和关闭连接;
    cursor.close()
    conn.close()
    

    3.使用面向对象封装代码对数据库进行建表,增,删,改,查等操作

    #!/usr/bin/python
    
    import sqlite3
    import time
    
    import consts
    from main_client import logger
    
    
    class SqliteHelper(object):
        def __init__(self, logger):
            self.logger = logger
    
        def connectDB(self):
            try:
                conn = sqlite3.connect(consts.database)
            except Exception as e:
                time.sleep(1)
                conn = sqlite3.connect(consts.database)
                self.logger.info("SqliteHelper.connectDB:{}".format(e))
            return conn
    
        def creat_table(self, table_name):
            res = False
            try:
                conn = self.connectDB()
                c = conn.cursor()
                sql = """CREATE TABLE {}
                       (name                CHAR(50)    NOT NULL,
                       floor                INT     NOT NULL,
                       phone_number         UNIQUE NOT NULL,
                       model_status         CHAR(50)    NOT NULL,
                       create_time TimeStamp NOT NULL DEFAULT (datetime('now','localtime')),
                       update_time TimeStamp NOT NULL DEFAULT (datetime('now','localtime')))
                       """.format(table_name)
                c.execute(sql)
                conn.commit()
                conn.close()
                res = True
                print("Table created successfully:{}".format(table_name))
                return res
            except Exception as e:
                self.logger.info("creat_table:{}".format(e))
    
        def insertData(self, table_name, name, floor, phone_number, model_status):
            try:
                conn = self.connectDB()
                c = conn.cursor()
                sql = """INSERT INTO {} (name,floor,phone_number,model_status) \
                      VALUES ('{}', {}, {}, '{}')""".format(table_name, name, floor, phone_number, model_status)
                c.execute(sql)
                conn.commit()
                print("Records created successfully")
                conn.close()
            except Exception as e:
                self.logger.info("insertData:{}".format(e))
    
        def selectData(self, table_name):
            try:
                conn = self.connectDB()
                c = conn.cursor()
                sql = "SELECT *  from {} where phone_number=178".format(table_name)
                cursor = c.execute(sql)
                res = cursor.fetchall()
                # get filed name
                columns = cursor.description
                filed = [columnName[0] for columnName in columns]
                zipData = [dict(zip(filed, item)) for item in res]
                conn.close()
                print("selectData done successfully:{}".format(zipData))
                return zipData
            except Exception as e:
                self.logger.info("selectData:{}".format(e))
    
        def updateData(self, table_name, model_status, phone_number, sql=None):
            try:
                conn = self.connectDB()
                c = conn.cursor()
                sql = """update {} set model_status = '{}' where phone_number = {}""".format(table_name, model_status,
                                                                                             phone_number)
                c.execute(sql)
                conn.commit()
                self.logger.info(
                    "updateData successfully model_status/phone_number:{}/{}".format(model_status, phone_number))
                conn.close()
            except Exception as e:
                self.logger.info("updateData:{}".format(e))
    
        def deleteData(self, table_name, phone_number):
            try:
                conn = self.connectDB()
                c = conn.cursor()
                sql = "DELETE from {} where phone_number={}".format(table_name, phone_number)
                c.execute(sql)
                conn.commit()
                conn.close()
                self.logger.info("deleteData successful:{}".format(phone_number))
            except Exception as e:
                self.logger.info("deleteData:{}".format(e))
    
        def delete_table(self, table_name):
            conn = self.connectDB()
            c = conn.cursor()
            c.execute("drop table {}".format(table_name))
            conn.commit()
            conn.close()
            print('delete done... table name :{}'.format(table_name))
    
        def DB2Array(self, srcData):
            targetData = []
            for i in range(len(srcData)):
                Line = []
                for j in range(len(srcData[i])):
                    Line.append(srcData[i][j])
                targetData.append(Line)
            return targetData
    
    
    if __name__ == '__main__':
        sql = SqliteHelper(logger)
        # sql.creat_table("facial_camera_info_64")
        # sql.delete_table("facial_camera_info_64")
        sql.insertData("facial_camera_info_64", 'zhangsan', 3, 178, '2')
        sql.updateData("facial_camera_info_64", '5', 178)
        # sql.deleteData("facial_camera_info_64",122)
        sql.selectData("facial_camera_info_64")
    
    
    展开全文
  • 建表一般来说是个挺简单的事情,但是Oracle的建表语句有很多可选的参数,有些我们可能平时不太用,用的时候又不知道怎么用,这里就写一个较完整的建表的例子: CREATE TABLE banping  (id NUMBER(5)   ...

    建表一般来说是个挺简单的事情,但是Oracle的建表语句有很多可选的参数,有些我们可能平时不太用,用的时候又不知道怎么用,这里就写一个较完整的建表的例子:

    CREATE TABLE banping
      (id  NUMBER(5) 
           CONSTRAINT banping_id_pk PRIMARY KEY, 
       last_name VARCHAR2(10) 
           CONSTRAINT banping_last_name_nn NOT NULL,
       first_name VARCHAR2(10) NOT NULL UNIQUE,
       userid VARCHAR2(8) 
           CONSTRAINT banping_userid_uk UNIQUE,
      start_date DATE DEFAULT SYSDATE,
      title VARCHAR2(10),
      dept_id NUMBER(7)
           CONSTRAINT banping_dept_id_fk REFERENCES dept(id),
      salary NUMBER(11,2),
    user_type VARCHAR2(4)
          CONSTRAINT banping_user_type_ck CHECK
           (user_type IN('IN','OUT')),
    CONSTRAINT banping_uk_title UNIQUE (title,salary)
     )
    INITRANS 1 MAXTRANS 255
    PCTFREE  20  PCTUSED  50
    STORAGE( INITIAL  1024K  NEXT  1024K  PCTINCREASE  0  MINEXTENTS  1  MAXEXTENTS  5)
    TABLESPACE  data
    ;

    解释说明如下:
    语法

    CREATE  TABLE  [schema.]table
    (column  datatype [, column  datatype] … )
    [TABLESPACE  tablespace]
     [PCTFREE  integer]
     [PCTUSED  integer]
     [INITRANS  integer]
     [MAXTRANS  integer]
     [STORAGE  storage-clause]
     [LOGGING | NOLOGGING]
     [CACHE | NOCACHE] ];

    Schema:表的所有者
    Table:表名
    Column:字段名
    Datatype:字段的数据类型
    Tablespace:表所在的表空间
    Pctfree:为了行长度增长而在每个块中保留的空间的量(以占整个空间减去块头部后所剩余空间的百分比形式表示),当剩余空间不足pctfree时,不再向该块中增加新行。
    Pctused:在块剩余空间不足pctfree后,块已使用空间百分比必须小于pctused后,才能向该块中增加新行。
    INITRANS:在块中预先分配的事务项数,缺省值为1
    MAXTRANS:限定可以分配给每个块的最大事务项数,缺省值为255
    STORAGE:标识决定如何将区分配给表的存储子句
    LOGGING:指定表的创建将记录到重做日志文件中。它还指定所有针对该表的后续操作都将被记录下来。这是缺省设置。
    NOLOGGING:指定表的创建将不被记录到重做日志文件中。
    CACHE:指定即使在执行全表扫描时,为该表检索的块也将放置在缓冲区高速缓存的LRU列表最近使用的一端。
    NOCACHE:指定在执行全表扫描时,为该表检索的块将放置在缓冲区高速缓存的LRU列表最近未使用的一端。
    STORAGE子句:
    INITIAL:初始区的大小
    NEXT:下一个区的大小
    PCTINCREASE:以后每个区空间增长的百分比
    MINEXTENTS:段中初始区的数量
    MAXEXTENTS:最大能扩展的区数

     如果已为表空间定义了MINIMUM EXTENT,则表的区大小将向上舍入为MINIMUM EXTENT值的下一个较高的倍数。

    外键关联的表dept的id列必须是唯一的或者是自身的主键,如不是可以用以下语句填加:

    alter table dept  add constraint dept_id_pk primary key(id)

    块空间使用参数可用来控制对数据段和索引段空间的使用:

    控制并发性参数:

    INITRANS和MAXTRANS指定初始的和最大的事务位置数,这些事务位置在索引块或者数据块内创建。事务位置用来存储在某一事件点上正在对块进行更改的事务的信息。一个事务只占用一个事务位置,即使它正在更改多行或者多个索引条目。 INITRANS对数据段的缺省值为1,对索引段的缺省值为2,以保证最低程度的并发。例如,如果INITRANS设为3,则保证至少3个事务可以同时对块进行更改。如果需要,也可以从块空闲空间内分配其它事务位置,以允许更多的事务并发修改块内的行。 MAXTRANS的缺省值为255,它设置可更改数据块或者索引块的并发事务数的限制。设置后,该值限制事务位置对空间的使用,从而保证块内有足够的空间供行或者索引数据使用。

    控制数据空间使用的参数:

    数据段的PCTFREE指定每个数据块中保留空间的百分比,用于因更新块内的行而导致的增长。PCTFREE的缺省值为10%。 数据段的PCTUSED代表Oracle服务器试图为表内的每个数据块维持的已用空间的最低百分比。如果一个块的已用空间低于PCTUSED,则将这块放回到空闲列表中。段的空闲列表示容纳将来所插入内容的可选择块的列表。根据缺省,每个段在创建时都有一个空闲列表。PCTUSED的缺省值为40%。 PCTFREE和PCTUSED都按可用数据空间百分比来计算,可用数据空间是从整个块大小减去块头空间后剩余的块空间。 块空间使用参数只能针对段指定,而不能在表空间级别设置。

    下面步骤介绍对PCTFREE=20且PCTUSED=40的数据段如何管理块内空间:

    1.向块中插入行,直到块内的空闲空间小等于20%。当行所占用的块内数据空间达到80%(100-PCTFREE)或者更多后,即无法再向该块进行插入。

    2.剩余的20%可在行大小增长时使用。例如,更新初始为NULL的列并分配一个值。这样,由于更新,块使用率可能超过80%。

    3.如果由于更新,删除了块内的行或者行大小减少,块使用率可能跌至80%以下。但是,仍然无法向块中插入,直到块使用率跌至PCTUSED以下,在本例中PCTUSED为40%。

    4.当块使用率跌至PCTUSED以下后,该块可用于插入。随着向块内插入行,块使用率增长,重复从步骤1开始的循环。


    source:http://www.banping.com/2009/07/08/oracle_create_table/


    展开全文
  • 数据库建模 极简易用数据库建模过程精细提炼,化繁为简,省去不必要的操作,只留下最需要的,直截了当的展现给...自带案例自带参考案例,以耳熟能详的[学生信息管理]为原型参考,让用户能够快速了解PDMan。 ...

    官网地址:http://www.pdman.cn/

    数据库建模

    极简易用数据库建模过程精细提炼,化繁为简,省去不必要的操作,只留下最需要的,直截了当的展现给用户。自带案例自带参考案例,以耳熟能详的[学生信息管理]为原型参考,让用户能够快速了解PDMan。

     

    展开全文
  • JSP案例-仿淘宝,并采用了DWR技术来改善用户体验,分享给大家学习。
  • 1、MySQL安装目录解释 bin:可执行文件。 include:放置了软件的.h头文件。 lib:放置了库文件 share:放置了字符集等信息 my-default.ini 这是配置文件:用来修改服务器的配置。一般修改完毕后要重新...数据库管理系统...

    1、MySQL安装目录解释
    bin:可执行文件。
    include:放置了软件的.h头文件。
    lib:放置了库文件
    share:放置了字符集等信息
    my-default.ini
    这是配置文件:用来修改服务器的配置。一般修改完毕后要重新启动服务。
    2、数据库的相关的概念
    1、数据库管理系统
    是由客户端和服务器端组成。数据存储在服务器,客户端是一个我们用来操作的用户界面而已。
    2、数据库
    数据库管理系统中包含了数据库。每个数据库包含有表、存储过程、视图、函数、触发器、事件。这些就是所谓的
    数据库对象。用来管理、组织、存储数据的仓库。
    3、表
    表由1行1行的数据组成,列又有一个名字叫字段。它的结构是二维表。它是用来描述一个一个实体的,有时候实
    体和实体之间有关系,这种关系我们也需要进行描述,它也是用二维表描述的。
    3、数据库设计概念
    1、域模型:一个对象用Java语言来描述。比如学生类
    2、概念模型:用E-R图(实体关系图)来描述
    3、物理模型:把E-R图转成数据库中的表。
    设计数据库:很多时候不要有冗余数据
    4、E-R图举例
    1)员工 (编号、姓名、性别、年龄、部门的编号)
    2)部门(部门的编号、部门的名称
    说明:实体用矩形、实体的数学用椭圆,实体之间的关系有一对多,多对一、多对多、一对一
    4、相关的命令操作
    1、什么是SQL?
    结构化查询语言。是1974年提出来的。它是关系数据库的标准语言。数据库分为关系数据库和非关系数据库。非
    关系数据库典型的有Redis,它可以用来做缓存。
    2、SQL的分类
    1)DML语言:数据操作语言(数据操纵语句),比如插入操纵insert、删除操纵delete、修改操纵update。
    2)DQL语言:数据查询语言,用来对数据库表中的数据进行查询。select
    3)DDL语言:数据定义语言。建立数据库、删除数据库、建立表的结构、修改表结构等这就需要使用数据定义语
    言。
    4)DCL:数据控制语言,常常需要建立用户,用户有不同的角色和权限。所以我们要给用户去授权。
    3、创建数据库
    1)命令行:CREATE DATABASE [IF NOT EXISTS] k9506
    2)手工操纵:单击创建
    3)查询数据库列表:
    show databases;
    4)删除数据库
    drop database k9506;
    4、建立表
    对于数据库来说,有一个很关键的问题就是要保证数据的完整性。所谓完整性,就i是数据的准确性和一致性。比
    如学号要唯一,性别只能是男或者女,学生参加考试的课程必须是学校开设了的课程。员工必须属于某个部门。
    1)主键:我们为了唯一的标识表中的记录,每条记录不一样,必须通过主键来保证。
    2)外键:如果A表中的某个字段的取值是另外一个表B中的主键列表值中的一个。那么我们把A表叫做外键表,也
    叫子表,刚才说的A中的那个字段就是外键。B表就是主键表。我们也会说A表参照B
    create table if not exists 表名(
    字段名1 数据类型 约束 [primary key],
    字段名2 数据类型 约束,

    对于外键的说明:
    foregin key(外键字段名) references 主键表(主键)
    5、修改表的结构
    1、修改表名(了解)
    alter table 原来的表名 rename [to] 新表名;
    2、表结构中添加字段
    alter table 表名 add 字段名 数据类型 约束;
    3、修改字段的名称
    alter table 表名 change 原字段名 新字段名 数据类型 ;
    4、修改字段的类型
    alter table 表名 modify 原字段名 新的数据类型 ;

    CRUD操作

    1、数据的插入操作
    1)语法
    insert into 表的名字(字段1,字段2,…,字段n) values(值1,值2,…,值n)
    2)规则:
    1)如果遇到列是auto_increment,可以把对应的值写null,也可以不写auto_increment的列,那么值也可以不
    写。
    2)有几个字段,就必须有几个值对应;个数要相等,顺序也要对应,数据类型要对应.
    3)字段的值可以省略,要保证值的个数和表的字段的个数相同,要有对应关系。
    4)默认的字段可以不写,如果写了在值列表中用default对应。
    5)对应外键字段如果定义的时候没有写not null,那么插入的值的时候,可以为null
    6)要现建立主键表,插入值,再到外键表中插入值,外键的值必须在主键中存在。
    案例:在booktype表中插入数据
    2、数据的修改操作
    1)语法
    update 表名 set 要修改的字段1=值1,字段2=值2,…,字段n=值n [where 条件表达式语句]
    2)规则
    1)如果没有where关键字和条件表达式语句,那么会修改表中的所有行
    2)日期类型的修改,可以直接用字符串
    UPDATE book SET price=price+10,publisher=‘中国少儿出版社’;
    UPDATE book SET price=price+5 WHERE price<40;
    3、数据的删除操作
    1、语法
    1)delete from tab_name [where 条件];//当不写where条件的时候会全部删除
    2)truncate table tab_name;//删除表全部记录
    两者的区别在于,上面的删除后,如果有自动增长的字段,继续添加的时候,自动增长的字段会从原来理论上的数
    字+1;后面的truncate方式会从1开始。
    2、规则
    1)要删除数据的时候要先删除子表中和外键关联的数据,然后才能删除主键表中的数据
    2)删除的时候一般要写where条件,否则就会删除全部数据。
    4、简单查询
    查询的语法
    1)标准语法
    select 字段1 [as 别名],字段2,…,字段n
    from 表名 [as] 别名
    where 条件语句
    order by 排序的字段 asc|desc; //a’sc 升序 desc降序
    2)模糊查询
    通配符:_ 1个字符长度
    %:任意长度
    3、查询的案例
    1)#查询tab_student表中的全部记录
    #查询tab_student表中的全部记录#
    SELECT * FROM tab_student;
    2)#查询tab_student表中的全部记录,把字段用中文名表示
    SELECT
    s_number AS ‘学号’,
    s_name AS ‘姓名’,
    s_age ‘年龄’,
    s_gender AS 性别
    FROM tab_student
    说明:字段的别名可以用as也可以不写as,别名可以用单引号也可以不用。
    3)#查询性别为女,并且年龄小于50的记录
    #查询性别为女,并且年龄小于50的记录#
    SELECT * FROM tab_student
    WHERE s_age<50
    AND s_gender=‘female’;
    说明:我们平时在写条件的时候,可以用如下的写法.<, >= ,<=, <>, is NULL ,is NOT NULL, and or not
    4)#查询学号为S_1001,或者姓名为liSi的记录:#
    SELECT * FROM tab_student
    WHERE s_number=‘S_1001’
    OR s_name=‘liSi’;
    5)#查询学号为S_1001,或者姓名为liSi且性别为female的记录:#
    SELECT * FROM tab_student
    WHERE s_number=‘S_1001’
    OR (s_name=‘liSi’ AND s_gender=‘female’);
    6)#查询学号为S_1001,S_1002,S_1003的记录:#
    第1种写法
    SELECT * FROM tab_student
    WHERE s_number
    IN(‘S_1001’,‘S_1002’,‘S_1003’)第2种写法
    SELECT * FROM tab_student
    WHERE s_number=‘S_1001’
    OR s_number=‘S_1002’
    OR s_number=‘S_1003’;
    7)#查询学号不是S_1001,S_1002,S_1003的记录:#
    #查询学号不是S_1001,S_1002,S_1003的记录:#
    SELECT * FROM tab_student
    WHERE s_number
    NOT IN(‘S_1001’,‘S_1002’,‘S_1003’);
    SELECT * FROM tab_student
    WHERE s_number<>‘S_1001’
    AND s_number<>‘S_1002’
    AND s_number<>‘S_1003’;
    8)#查询年龄为null的记录:
    #查询年龄为null的记录:#
    SELECT * FROM tab_student
    WHERE s_age IS NULL;
    #下面的是错误的写法
    SELECT * FROM tab_student
    WHERE s_age=’’;
    9)查询年龄不为null的学生记录
    #查询年龄不为null的学生记录#
    SELECT * FROM tab_student
    WHERE s_age IS NOT NULL;
    10)#查询年龄在20到40之间的学生记录:
    SELECT * FROM tab_student
    WHERE s_age BETWEEN 20 AND 40;
    和下面的写法等价
    SELECT * FROM tab_student
    WHERE s_age>= 20 ANDs_age<=40;
    11)#查询姓名由5个字母构成的学生记录:#
    #查询姓名由5个字母构成的学生记录:#
    SELECT * FROM tab_student
    WHERE s_name LIKE ‘_____’;
    12)#查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
    #查询姓名由5个字母构成,并且第5个字母为“i”的学生记录#
    SELECT * FROM tab_student
    WHERE s_name LIKE ‘____i’;
    13)#查询姓名以“z”开头的学生记i录:#
    #查询姓名以“z”开头的学生记i录:#
    SELECT * FROM tab_student
    WHERE s_name LIKE ‘z%’;
    14)#查询姓名中第2个字母为“i”的学生记录:#
    #查询姓名中第2个字母为“i”的学生记录:#
    SELECT * FROM tab_student
    WHERE s_name LIKE ‘_i%’;
    15)#查询姓名中包含“a”字母的学生记录:
    #查询姓名中包含“a”字母的学生记录:#
    SELECT * FROM tab_student
    WHERE s_name LIKE ‘%a%’;
    16)#查询所有学生记录,按年龄升序排序:
    #查询所有学生记录,按年龄升序排序:
    SELECT * FROM tab_student
    WHERE s_age IS NOT NULL
    ORDER BY s_age ASC
    17)#查询所有学生记录,按年龄降序排序:
    #查询所有学生记录,按年龄降序排序:#
    SELECT * FROM tab_student
    WHERE s_age IS NOT NULL
    ORDER BY s_age DESC
    1)#查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序:#
    #查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序:#
    SELECT * FROM emp
    ORDER BY sal DESC,empno ASC;
    2)#查询雇员信息和每个雇员的工资=月薪+奖金#
    SELECT e.,IFNULL(sal,0)+IFNULL(comm,0) AS 工资 FROM emp e
    3)#查询所有雇员,按月薪+佣金升序排序:#
    #查询所有雇员,按月薪+佣金升序排序:#
    SELECT ,IFNULL(sal,0)+IFNULL(comm,0) AS 工资 FROM emp
    ORDER BY IFNULL(sal,0)+IFNULL(comm,0) ASC;
    5、聚合函数
    1)max()求最大值
    2)min()求最小值
    3)count()求记录的条数
    4)sum()求和
    5)avg()平均值
    1)#查询emp表中记录数#
    #查询emp表中记录数#
    SELECT COUNT(1) FROM emp;
    2)#查询emp表中有佣金的人数:
    #查询emp表中有佣金的人数:#
    SELECT COUNT(
    ) FROM emp
    WHERE comm IS NOT NULL
    3)#查询emp表中月薪大于2500的人数#
    #查询emp表中月薪大于2500的人数#
    SELECT COUNT(
    ) FROM emp
    WHERE sal>2500;
    4)#统计月薪与佣金之和大于2500元的人数:#
    #统计月薪与佣金之和大于2500元的人数:#
    SELECT COUNT() FROM emp
    WHERE IFNULL(sal,0)+IFNULL(comm,0)>2500;
    5)#查询有佣金的人数,以及有领导的人数
    #查询有佣金的人数,以及有领导的人数:#
    SELECT COUNT(comm) AS 佣金人数,COUNT(mgr) AS 领导人数 FROM emp
    6)#查询所有雇员月薪和#
    #查询所有雇员月薪和#
    SELECT SUM(sal) FROM emp
    7)#查询所有雇员月薪和,以及所有雇员佣金和:
    #查询所有雇员月薪和,以及所有雇员佣金和:#
    SELECT SUM(sal),SUM(IFNULL(comm,0)) AS 佣金和 FROM emp;
    8)#查询所有雇员月薪+佣金和:
    #查询所有雇员月薪+佣金和:#
    SELECT SUM(IFNULL(comm,0)+sal) AS 佣金和 FROM emp;
    9)#统计所有员工平均工资:#
    #统计所有员工平均工资:#
    SELECT AVG(sal) FROM emp;
    10)#查询最高工资和低工资:#
    SELECT MIN(sal) 最低工资,MAX(sal) 最高工资 FROM emp;
    6、分组统计
    1)分组统计的语法
    select 字段1 [as 别名],字段2,…,字段n from 表名 [as] 别名
    from 表名 as 别名
    where 字句 //全表筛选
    group by 分组字段
    having 组内刷选字段
    order by 排序字段
    2)案例1:#查询每个部门的部门编号以及每个部门的人数#
    SELECT deptno AS 部门编号,COUNT(empno) AS 部门人数 FROM emp
    GROUP BY deptno;
    3)#查询每个部门的部门编号以及每个部门工资大于1500的人数
    SELECT deptno,COUNT(empNo)
    FROM emp
    WHERE sal>1500
    GROUP BY deptno;
    4)#查询工资总和大于9000的部门编号以及工资和:#
    #查询工资总和大于9000的部门编号以及工资和:#
    SELECT deptno,SUM(sal)
    FROM emp
    GROUP BY deptno
    HAVING SUM(sal)>9000
    5)#查询每个部门的部门编号,以及部门工资高于1500元的人数,如果人数大于2则显示#
    #查询每个部门的部门编号,以及部门工资高于1500元的人数,如果人数大于2则显示#
    SELECT deptno,COUNT(empNo)
    FROM emp
    WHERE sal>1500
    GROUP BY deptno
    HAVING COUNT(empno)>2;
    7、连表查询
    内连接、左外连接、右外连接、自连接
    1、什么是连表查询?
    如果根据业务的需要,发现要操作的表不是一张表,而是2个或者2个以上的表,这就是连表查询。比如要查询员
    工的编号、姓名、入职时间、部门名称。很显然发现前面几个字段是emp表中的部分字段、后面的部门名称是dept
    表中的部分字段。查询的结果集中的每行记录是两个表中字段进行的筛选。
    2、笛卡尔集
    如果有集合A={a,b}和集合B={1,2,3},那么A和B的笛卡尔集是{(a,1),(a,2),(a,3),(b,1),{b,2},(b,3)};计算元组的个数是
    2
    3=6。
    实际上进行连表查询,就是表和表先进行笛卡尔集,然后再对这个结果进行筛选。筛选的条件就是参照的主、外
    键。 MySQL中2个表做笛卡尔集,它的行数是两个表的行数相乘,字段的个数为两个表的字段个数相加;就是把两
    张表 合成一个大表。
    #1999年 ANSI SQL规范 做笛卡尔集#
    SELECT *
    FROM emp,dept;
    #2003年 ANSI SQL规范 做笛卡尔集#
    SELECT e.,d.
    FROM emp e
    INNER JOIN dept d;
    3、内连接查询
    1)1999年的规范
    select t1.星号,t2.星号,t3.星号
    from tableName t1,
    tableName t2
    tableName t3
    where t1.外键=t2.主键
    and t2.外键=t3.主键
    2) 2003年的规范
    select select t1.星号,t2.星号,t3.星号
    from tableName t1
    inner join tableName t2
    on t1.外键=t2.主键
    inner join tableName t3
    on t2.外键=t3.主键;
    3)#查询员工的信息、部门的名称#
    #查询员工的信息、部门的名称#
    SELECT e.,d.dname
    FROM emp e,dept d
    WHERE e.deptno=d.deptno;
    SELECT e.
    ,d.dname
    FROM emp e
    INNER JOIN dept d
    ON e.deptno=d.deptno;
    4、左外连接
    把内连接的inner换成left,左表是left前面的表,右表是left后面的表;筛选后规则如下:
    坐标中的记录如果和右边连接上了,那么就出现在结果集中,如果连接不上,左边的内容照抄,右边的字段用null
    填充。
    5、右外连接
    把内连接的inner换成right,左表是right前面的表,
    6、自连接查询
    自己的结果集和自己的另外一个结果集进行连接查询,诀窍是对于表取别名,两个别名不要相同。
    SELECT e1.empno,e1.ename,e2.ename AS 上级名称,e2.empno 上级编号
    FROM emp e1
    INNER JOIN emp e2
    ON e1.mgr=e2.empno
    3、子查询
    1、子查询也叫嵌套查询,在一个查询中嵌套了其他的查询,这就是子查询。
    2、一般是在from或者是where 条件中放了另外一个查询。另外一个查询叫子查询,本查询叫主查询。执行的时候
    先执行子查询,再执行主查询。因为主查询要依赖子查询的结果。
    SELECT e.deptno,e.ename
    FROM emp e
    WHERE e.deptno=
    (SELECT deptno
    FROM dept
    WHERE dname =‘SALES’)
    5、分页查询
    员工的工资按照从低到高排序,查询排序结果的前3条记录。
    SELECT * FROM emp
    ORDER BY sal ASC
    LIMIT 0,3;
    员工的工资按照从低到高排序,查询排序结果的第4条到第6条记录。
    SELECT * FROM emp
    ORDER BY sal ASC
    LIMIT 3,3;
    员工的工资按照从低到高排序,查询排序结果的第7条到第9条记录。
    SELECT * FROM emp
    ORDER BY sal ASC
    LIMIT 6,3;
    把员工的工资按照从低到高排序,每页显示3条,查询第1页。每页显示的条数pageSize=3.第几页叫
    pageNo=1;
    SELECT * FROM emp
    ORDER BY sal ASC
    LIMIT (pageNo-1)*pageSize,pageSize;

    展开全文
  • create DATABASE test CREATE TABLE Student ( S VARCHAR(64), Sname VARCHAR(64) ,Sage INT, Ssex VARCHAR(2), PRIMARY KEY (S) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE Course ( C VARCHAR(64),Cname
  • 前言在数据库表结构变更发布之前,我们会和开发沟通索引设计是否合理,发现部分开发同学对于索引设计还是有一些知识盲区。本文把常见的案例记录下来,做个分析,抛砖引玉。区分度和过滤性先看一段和开发同学日常 sql...
  • Oracle数据库安装的时候会自带一个练习用数据库(其中包含employee表,后来版本中此表改名为emp); 首先在安装过程中应该有个选项“是否安装实例表”(完全安装模式下默认是选择的),需要选择才有此表; 此表...
  • 运行效果: 首先,做这个简单的操作,需要你安装MySql数据库,我的好几个同学,上课不认真听,自己也不看看书学学,最后来问我说:为什么...吐槽完,开始本文案例,贼简单。 1、创建一个web项目chapter04,导...
  • 北大青鸟数据库项目-----宠物商店 1宠物商店Java 源代码(DAO) 2数据库建表结构以及表中内容,都有展示 3效果展示图 数据库信息修改src目录下database.properties 文件
  • C++ 操作数据库 经典案例 原文地址:https://blog.csdn.net/lcuwb/article/details/80158288 //下面的代码是一个实现C++连接MYSQL数据库的很好的例子//这里用了建表,插入,检索,删表等常用功能//我用VC++6.0...
  • C++ 操作数据库 经典案例

    千次阅读 2018-05-01 18:15:56
    //下面的代码是一个实现C++连接MYSQL数据库的很好的例子 //这里用了建表,插入,检索,删表等常用功能 //我用VC++6.0生成,已经成功连接了。 //在VC++6.0中要想把做一下两步准备工作才可以。 //(1)Tools-&gt;...
  • 完整代码下载地址:... 1.创建数据库mybatis_01,并建表user,插入一条数据,如图 2.创建springboot项目 点击next, 设置项目名称 点击next,选择需要用的框架,spring web、mybatis、mysqlDriver ...
  • 数据库建表: 执行结果: 加入maven依赖: 在pom.xml中 添加mybatis依赖和mysql驱动 <!--mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>...
  • 一、select练习1、说明练习: * 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。 1. 定义Emp类 2. 定义方法 public List<Emp> findAll(){} 3....2、建表create table ...
  • 安卓数据库案例3

    2021-02-25 01:33:44
    这三个模块是独立的模块,如果面对相册中大量的数据,需要将中间结果存储到数据库中. 因为纯属验证算法的准确性,这里建立的Table比较简单. 建立三个表格,分别是Pciture\Faces\Cluster表 文件结构如下: ...
  • 大纲一、PROC简介二、PROC使用1.proC环境准备2.proC代码示例建表查表插入数据更新数据删表 一、PROC简介 二、PROC使用 1.proC环境准备 2.proC代码示例 建表 查表 插入数据 更新数据 删表
  • 数据库查询小案例

    2017-01-15 18:58:00
    建表语句 student表: create table student (sno char(9) primary key, sname char(20) unique, ssex char(2), sage smallint, sdept char(20) ); course表: create table course (cno char(4) primary ...
  • Oracle建表语句和约束语句案例

    千次阅读 2012-09-04 19:54:30
    概述:数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。在Oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,...
  • 1.数据库建表 表结构如下: 数据库名:temporary 表名:book 表字段:id/bookname/author 2.创建实体类 Book类(不需要Spring 管理) public class Book { private Integer id; private String bookName; ...
  • 为了及时共享行业案例,通知共性问题,达成共享和提前预防,我们整理和编辑了《云和恩墨技术通讯》,通过对过去一段时间的知识回顾,故障归纳,以期提供有价值的信息供大家参考。同时,我们也希望能够将热点事件、新...
  • 多表之间的表原则:(1)一对多:分类和商品 (一个分类对应多个商品)(2)多对多:老师和学生、学生和课程(3)一对一:公民和身份证、班级和班长三、商城案例——建表和数据准备四、使用商城表实现对商品信息的多...
  • 使用公交行驶路线为本文案例,看看窗口函数和with as的具体使用场景。 使用场景 表结构与数据如下: 想统计每路公交车上行方向的起始站、下行方向的起始站,结果如下: 注:sxzd:上行终点站,sxqd:上行起点站,xxzd...
  • 一、 问题是这样来的BG内部要进行数据库的容灾演习,需要模拟线上实际的环境进行测试,这就需要copy一份线上的数据库到测试库中,其实也就是重建一个线上数据库。要完成这个任务其实有N种不同的做法,但是我当时一想...
  • sql sever 基础 建表

    2017-06-29 14:19:00
    SQL Sever 基础以创建银行数据库bankDB为案例 1、创建数据库 1-1 创建文件夹用以存放数据库 1-2 创建建库bankDB 2、创建数据库 2-1、创建用户信息表 userInfo 字段名称 数据类型 说明 ...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 268
精华内容 107
关键字:

数据库建表案例