精华内容
下载资源
问答
  • 删除基本表的关键字
    2021-02-02 05:57:43

    mysql中清空表的方法:使用“TRUNCATE 表名”语句,可以完全清空一个表;删减表的方法:使用“DROP TABLE 表名1 [ ,表名2, 表名3 ...];”语句。

    mysql清空表

    MySQL 提供了 DELETE 和 TRUNCATE 关键字来删除表中的数据。

    TRUNCATE 关键字用于完全清空一个表。其语法格式如下:TRUNCATE [TABLE] 表名

    其中,TABLE 关键字可省略。

    实例

    新建表 tb_student_course,插入数据并查询,SQL 语句和运行结果如下:mysql> CREATE TABLE `tb_student_course` (

    -> `id` int(4) NOT NULL AUTO_INCREMENT,

    -> `name` varchar(25) NOT NULL,

    -> PRIMARY KEY (`id`)

    -> );

    Query OK, 0 rows affected (0.04 sec)

    mysql> INSERT INTO tb_student_course(name) VALUES ('Java'),('MySQL'),('Python');

    Query OK, 3 rows affected (0.05 sec)

    Records: 3 Duplicates: 0 Warnings: 0

    mysql> SELECT * FROM tb_student_course;

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

    | id | name |

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

    | 1 | Java |

    | 2 | MySQL |

    | 3 | Python |

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

    3 rows in set (0.00 sec)

    使用 TRUNCATE 语句清空 tb_student_course 表中的记录,SQL 语句和运行结果如下:mysql> TRUNCATE TABLE tb_student_course;

    Query OK, 0 rows affected (0.04 sec)

    mysql> SELECT * FROM tb_student_course;

    Empty set (0.00 sec)

    mysql删减表

    在 MySQL 数据库中,对于不再需要的数据表,我们可以将其从数据库中删除。

    在删除表的同时,表的结构和表中所有的数据都会被删除,因此在删除数据表之前最好先备份,以免造成无法挽回的损失。

    基本语法

    使用 DROP TABLE 语句可以删除一个或多个数据表,语法格式如下:DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...]

    对语法格式的说明如下:表名1, 表名2, 表名3 ...表示要被删除的数据表的名称。DROP TABLE 可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。

    IF EXISTS 用于在删除数据表之前判断该表是否存在。如果不加 IF EXISTS,当数据表不存在时 MySQL 将提示错误,中断 SQL 语句的执行;加上 IF EXISTS 后,当数据表不存在时 SQL 语句可以顺利执行,但是会发出警告(warning)。

    两点注意:用户必须拥有执行 DROP TABLE 命令的权限,否则数据表不会被删除。

    表被删除时,用户在该表上的权限不会自动删除。

    实例

    选择数据库 test_db,创建 tb_emp3 数据表,输入的 SQL 语句和运行结果如下所示。mysql> USE test_db;

    Database changed

    mysql> CREATE TABLE tb_emp3

    -> (

    -> id INT(11),

    -> name VARCHAR(25),

    -> deptId INT(11),

    -> salary FLOAT

    -> );

    Query OK, 0 rows affected (0.27 sec)

    mysql> SHOW TABLES;

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

    | Tables_in_test_db |

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

    | tb_emp2 |

    | tb_emp3 |

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

    2 rows in set (0.00 sec)

    由运行结果可以看出,test_tb 数据库中有 tb_emp2 和 tb_emp3 两张数据表。

    我们来删除数据表 tb_emp3,输入的 SQL 语句和运行结果如下所示:mysql> DROP TABLE tb_emp3;

    Query OK, 0 rows affected (0.22 sec)

    mysql> SHOW TABLES;

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

    | Tables_in_test_db |

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

    | tb_emp2 |

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

    1 rows in set (0.00 sec)

    执行结果可以看到,test_db 数据库的数据表列表中已经不存在名称为 tb_emp3 的表,删除操作成功。

    推荐教程:mysql视频教程

    更多相关内容
  • 单链表代码虽然不太难但是逻辑思维较强。 首先对单链表的结构进行介绍,单链表是由很多个节点一个接一个串接起来的,每个节点包含两部分,数据部分和地址部分,我们这里讲的是无头的单链表,所以没有头节点,每个...
  • 数据库基本语句和关键字详解

    千次阅读 2021-09-03 16:46:17
    删除数据库use 库名; 使用数据库1.Create table book(id int not null auto_increment(设置主键自增),字段名 varchar(50) not null(不为空) default " " (默认值为""),字段名 varchar(50) not null default ‘’,...

    一、数据库的基本语句

    Create database 数据库名; 创建新数据库

    show databases; 查看所有库

    drop database 数据库名; 删除数据库

    use 库名;  使用数据库

    二、数据表的基本语句

    1.Create table book(

    id int not null auto_increment(设置主键自增),

    字段名 varchar(50) not null(不为空) default " " (默认值为""),

    字段名 varchar(50) not null default ‘’,

    字段名 varchar(50) not null default ‘’,

    字段名double not null default 0.00,

    字段名 text,

    字段名date,

    primary key (id),

    index 索引名称(数据表想设置索引列的名称),(为某个字段创建索引)

    )   新增数据表

    2.rename table 原表名 TO  新表名     重命名数据表

    或者是alter table  原表名  rename 新表名   重命名数据表

    3.show tables;查看所有数据表

    4.drop table 表名; 删除某张表

    5.desc 表名;  查看表结构

    6.alter table 数据表名 add 列名 数据类型 约束 alter 列名;   添加列放在某列的后面

    例如:alter table employee add height int(4) default 170 alter name;    添加一列int类型的 身高字段,默认值为170,放在name字段后面(如果想放在第一列把alter 列名改为first)

    7.alter table 表名 change 原列名 新列名 数据类型 约束;更改某列列名

    三、数据库关键字总结

    1.where

    where常在数据库中用来进行条件筛选

    如 select xx from xx where id=xx;

    这就是筛选出id字段=xx的所有记录

    2.select

    用于查询数据表里的数据

    select 查询的字段名(*代表全部数据) from 表名 where [条件表达式]

    3.insert

    用于新增数据库里新的字段和数据

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

    可以利用insert关键字将已有的表中数据复制到另一张新表中

    举例:将student表中name,qq_mail两字段数据复制到test_user的name和email字段中

    insert into test_user(name,email) select name,qq_mail from student;

    4.update

    用来修改数据库里的数据

    update 表名 set 值1=xx,值2=xx where [条件表达式]

    5.delete

    用来删除数据库中的某个字段

    delete from 表名 where [条件表达式]

    6.distinct

    用来去除数据库中重复的数据

    select distinct 字段名(*) from 表名

    7.order by

    用于查询的时候可以对数据进行升序/降序排列

    select 字段名 from 表名 order by desc(降序)/asc(升序) 默认升序

    8.group by

    用于数据库查询的时候对数据进行分组

    select 字段名 from 表名 group by 字段名1  按照字段名1进行分组

    9.having

    和where一样是进行条件筛选的,但是区别是where是先把所有符合条件的数据进行筛选,筛选之后再进行分组操作,而having是先进行分组操作,分组之后再对分组后的数据进行筛选

    关于数据库中having和where的区别
    1.首先用having条件来查询的语句是先分组再判断的
    2.having可以使用统计函数,where不可以
    3.having可以指定查询的字段别名,where不可以
    4.关于关键字执行顺序 where -> group by -> having -> order by -> limit

    10.limit

    limit是常用于分类查询的一个关键字

    select 字段名 from 表名 limit 1 , 5;这是从第二条数据开始查,查询五条数据

    第一个参数是从第几行开始查,第二个关键字是查询几条数据

    select 字段名 from 表名 limit  5;   这是默认从第一行开始查,查询5条数据,当默认第一行开始的时候是limit 0 , 5 所以可以省略第一个参数

    11.offset

    这个关键字常用于limit中 表示跳过几条数据

    select 字段名 from 表名 limit 1 , 5 offset 3;这是从第二条数据开始查,查询五条数据

    跳过3条数据,也就是说查询第5,6条数据

    与select 字段名 from 表名 limit 5,2; (从第五条数据开始查询,查询两条数据)查询结果是一样的

    12.and

    常用于条件筛选中,表示同时满足and前后的条件

    select 字段名 from 表名 where 字段名1>xx and 字段名2=yy;

    筛选出既满足字段名1>xx的记录和字段名2=yy的记录取两者的交集

    13.or

    常用于条件筛选中,表示or前后的条件满足其一即可

    select 字段名 from 表名 字段名1>xx or字段名2=yy;

    筛选出满足字段名1>xx的记录或者是字段名2=yy的记录

    14.like

    常用于数据库中模糊查询

    select 字段名 from 表名 where name="刘%";

    查询name中刘是第一个字的所有数据

    select 字段名 from 表名 where name="刘_"

    查询name中刘是第一个字,一共2个字的所有数据;

    _代表匹配一个任意字符,%表示匹配多个任意字符

    15.union

    常用于数据库中的组合查询

    SELECT 字段名 FROM 表名1
    UNION
    SELECT 字段名 FROM 表名2;

    如果表1有a,b,c,d四条数据,表二有a,e,f,g四条数据,那么查询结果就是a,b,c,d,e,f,g,是会去掉相同的数据的

    16.union all

    常用于数据库中的组合查询

    SELECT 字段名 FROM 表名1
    UNION ALL
    SELECT 字段名 FROM 表名2;

    如果表1有a,b,c,d四条数据,表二有a,e,f,g四条数据,那么查询结果就是a,b,c,d,a,e,f,g,是不会去掉相同的数据的

    17.left join

    左连接查询,常用于多表联查,将两个表联合查询,查询出来的结果会包括左表的全部记录和右表表中符合左表字段的记录,如果左表中对应的数据在右表查不到的话在右表中对应字段的值会显示为NULL

    select 字段名 from 表名1 left join 表名2 on 表名1.字段名=表名2.字段名;

    18.right join

    右连接查询,常用于多表联查,将两个表联合查询,查询出来的结果会包括右表的全部记录和左表中符合右表字段的记录,如果右表中对应的数据在左表查不到的话在左表中对应字段的值会显示为NULL

    select 字段名 from 表名1 right join 表名2 on 表名1.字段名=表名2.字段名;

    19.inner join

    内连接查询,常用于多表联查,会把两个表中共有的字段名及数据显示出来

    select * from 表名1 inner join 表名2 on 表名1.字段名=表名2.字段名;

    20.Alter

    修改字段长度常用语句

    alter table 表名 modify 字段名 字段类型;

    例如:

    alter table qtline modify qtl_bidernote VARCHAR2(4000);

    21.rename

    用于修改字段名称

    ALTER TABLE  表名 RENAME COLUMN 原字段名 TO 改后字段名;
    

    22.add

    添加字段常用sql

    mysql:alter table 表名 add  字段名  字段类型(字段长度)
    

    oracle:ALTER TABLE table_name ADD column_name data_type constraint

    pgsql:ALTER TABLE 表名 ADD COLUMN 字段名 字段类型(长度)

    23.处理主键自增不连续的情况

    方法一

    delete from test;

    alter table `test` auto_increment=1

    (好处,可以设置AUTO_INCREMENT 为任意值开始)

    提示:如果表列和数据很多,速度会很慢,如90多万条,会在10分钟以上。

    方法二

    truncate table test

    (好处,简单,AUTO_INCREMENT 值重新开始计数)

    一般情况下我们使用第二个就可以了,记住以上情况都是彻底删除所有记录。

    24.index

    index索引:便于更加快速高效的查询数据

    创建普通索引

    3.ALTER TABLE 想添加索引的表名 ADD INDEX 索引名 (想添加索引的字段名): 添加普通索引,索引值可出现多次。

    创建主键索引

    1.ALTER TABLE 表名 ADD PRIMARY KEY (字段名): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

    创建唯一索引
    2.ALTER TABLE 表名 ADD UNIQUE 索引名 (字段名): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

    创建全文索引(大多数数据库一般不会使用全文索引,取决于DBMS,一般用于模糊查询大量文本数据时)
    4.ALTER TABLE 表名 ADD FULLTEXT 索引名 (字段名):该语句指定了索引为 FULLTEXT ,用于全文索引。

    删除索引

    ALTER TABLE 表名 DROP INDEX (索引名);

    查看索引

    SHOW INDEX FROM表名\G

    25.视图

    视图可以这么理解,就相当于数据库中的一张表,只不过这张表是依赖于其他表存在的

    语法CREATE OR REPLACE VIEW 视图名(视图字段1,视图字段2,视图字段3,视图字段4) as 查询语句(将查询出来的内容依次赋给视图)

    举例:CREATE OR REPLACE VIEW find (ID,RequestAmountMain,RequestAmountSubSum,multiple) as SELECT A.ID,A.RequestAmount,SUM(B.RequestAmount),SUM(B.RequestAmount)/A.RequestAmount as multiple FROM bpbizpaymentrequest A,BPBIZPAYMENTREQRECEIVER B WHERE A.ID=B.PARENTID GROUP BY A.ID,A.RequestAmount

    四、数据库中的函数

        curdate() -- 获取当前日期: 年月日
        curtime() -- 获取当前时间: 时分秒
        sysdate()/now() -- 获取当前日期+时间, 年月日 时分秒
        year('2020-8-10'): 返回日期中的年份, 2020
        month('2020-8-10'): 返回日期中的月份, 8
        day('2020-8-10'): 返回日期中的天数, 10
        hour('2020-8-10 12:34:56'): 返回时间中的小时, 12
        minute('2020-8-10 12:34:56'): 返回时间中的分钟数, 34
        second('2020-8-10 12:34:56'): 返回时间中的秒值, 56
    

    可以使用到sql语句中

    如 select * from user where user_time=curdate();

    数据库中的查询常用函数

    count(列名 | *): 
    		count(列名): 表示统计当前列的值有多少个(不统计null值)
    		count(*): 以行为单位,统计查询结果中有多少行记录
    max(列名): 表示统计当前这一列中所有值中的最大值
    min(列名): 表示统计当前这一列中所有值中的最小值
    sum(列名): 表示统计当前这一列中所有值的和(也就是说会将这一列中所有的值加在一起返回)
    avg(列名): 表示统计当前这一列中所有值的平均值(这一列中所有值的和 / 不是null值的个数 )

    五、关于数据库的备份

    1、备份单个数据库
    在cmd窗口(未登录、未连接到mysql服务器的界面)中,可以通过如下命令对指定的数据库进行备份:
    mysqldump -u用户名 -p密码 库名 > 备份文件的位置
    示例1: 对db40库中的数据(表,表记录)进行备份,备份到 d:/db40.sql 文件中
    mysqldump -uroot -proot db40 > d:/db40.sql
    2、备份多个数据库(比如备份两个数据库)
    在cmd窗口(未登录、未连接到mysql服务器的界面)中
    mysqldump -u用户名 -p密码 --databases 库名1 库名2 ... > 备份文件的位置
    示例2: 对db20 和 db40 库中的数据进行备份,备份到 d:/db2040.sql 文件中
    mysqldump -uroot -proot --databases db20 db40 > d:/db2040.sql
    注意: 1)如果输入命令回车之后没有提示错误,就说明备份成功了!
    2)备份多个数据库,不仅会备份这个库中的表和表记录,同时会备份库本身!
    或者如果想备份mysql服务器中的所有的库以及库中的表和表记录,可以通过如下命令:
    mysqldump -uroot -proot -A > d:/dball.sql
    输入完后回车如果没有提示错误(error是错误,警告不是错误可以忽略),即表示备份成功!

    1、恢复数据库方式一(单个数据库):
    在cmd窗口中(未登录的状态下),可以通过如下命令对指定的数据库进行恢复
    mysql -u用户名 -p密码 库名 < 备份文件的位置
    示例1: 将 d:/db40.sql 文件中的数据恢复到 db60 库中
    1) 先在cmd窗口中(已登录的状态下), 先创建db60库
    	create database db60 charset utf8;
    2) 再回到cmd窗口中(未登录的状态下), 执行下面恢复的命令
    	mysql -uroot -proot db60 < d:/db40.sql
    2、恢复数据库方式二(多个数据库)
    在cmd窗口中(已登录的状态下),可以通过source命令来执行指定位置的sql文件中的sql语句:
    	source sql文件的位置
    示例2: 将 d:/db40.sql 文件中的数据恢复到 db80 库中
    1) 先创建db80库, 并进入到db80库
    	create database db80 charset utf8;
    	use db80;
    2) 再通过source命令执行 d:/db40.sql 文件中的sql语句
    	source d:/db40.sql
    示例3: 将 d:/db2040.sql 文件中的数据恢复回来
    1) 将db20,db40库删除(模拟数据丢失)
    	drop database db20;
    	drop database db40;
    2) 再通过source命令执行 d:/db2040.sql 文件中的sql语句
    	source d:/db2040.sql
    展开全文
  • 【单选题】对《将进酒》全诗...则在定义工作信息时,对于外关键字删除规则应定义为 【单选题】下列的SQL命令,实现投影操作的是 【单选题】roduction systems with customized outputs typically have relatively:

    【单选题】对《将进酒》全诗分析不正确的是

    【单选题】下列划线词语的解释有误的一项是

    【多选题】下列食品属于不完全蛋白质的是 ( ) 。

    【单选题】下列聚合函数中属性列必须是数值型的是

    【单选题】( )体现了商品生产者之间相互交换的劳动关系。

    【单选题】在SELECT语句中使用SUM(列名)时,列名应该

    【判断题】商品串味属于化学变化 。

    【判断题】SQL语言是高度非过程化的语言。

    【单选题】下列聚合函数中要求属性列必须是数值型的是

    【判断题】一件服装不宜长期穿用,应轮换使用,以便服装材料的疲劳得以恢复。

    【判断题】视图定义在基本表之上,对视图的任何操作最终均要转换为对基本表的操作。

    【单选题】女主角小洁在哪家店工作?

    【多选题】在SQL查询语句中的FROM后面,可以是

    【单选题】剩余价值率与利润率的关系是()。

    【单选题】男主角因为视觉障碍的关系,在行动上受阻,他们透过哪种能力的学习来辨别方向?

    【判断题】“黄河之水天上来,奔流到海不复回”这一句有比兴的作用,以黄河水的急遽奔流和一去不复返引起人生短暂的慨叹,比喻人生易老,年华易逝;同时,以黄河的伟大永恒来反衬生命的渺小脆弱。

    【单选题】You should ____ yourself with the rules before you start to paly the game.

    【单选题】下列SQL语句中,修改表结构的关键字是

    【单选题】本片主角因出生时什么原因导致视觉障碍?

    【单选题】男主角家里主要种什么品种的兰花?

    【单选题】果实的呼吸强度以 ( ) 最大。

    【判断题】胃毒杀虫法是化学杀虫法的主要方法之一。

    【填空题】本课程上课地点在? 课后拍摄的照片,杯子颜色是?

    【单选题】请问本周(3月27日)所放映的影片是?

    【填空题】请用下来单词的正确形式填空。 authority coincide coordinate demanding efficiency familiarize interval plot at one ’ s best by contrast 我们都想要健康,在应付各种严峻挑战时,想要自己处于最佳状态。健康方面的好建议并不少。例如:均衡饮食、睡眠充足,以及每周安排一些时间做运动。一门新学科 —— 时间生物学 —— 为我们提供了一个能取得最佳效率的新方法。这个方法就是协调我们的日常活动与自身身体能力。我们将一天中每隔 4 小时所测得的六个体温读数标记在坐标纸上,让自己熟悉以下信息:我的体温何时开始上升,何时体温升到最高,何时降到最低。然后,我们遵照时间生物学权威人士的指示来规划我们的日常活动。例如,体力要求最高的工作要在我们体温最高时去做。而与之不同的是,像读书和思考这样的脑力劳动就要在体温下降时去做。这样,我们实际做的事就与我们身体的自然节奏相吻合,我们就能如预期一样表现出最佳状态。 p.p1%20%7Bmargin%3A%200.0px%200.0px%200.0px%200.0px%3B%20font%3A%2023.0px%20%26%2339%3BHelvetica%20Neue%26%2339%3B%3B%20color%3A%20%23454545%7D%0Aspan.s1%20%7Bfont%3A%2023.0px%20%26%2339%3B.PingFang%20SC%26%2339%3B%7D%0Aspan.s2%20%7Bcolor%3A%20%23e4af0a%7D We all want to be healthy , to be 1 ) __________ when handling tough challenges. There has never been a lack of good advice on health. For example , eat a balanced diet , getting enough sleep , and set aside some time every week for exercise. Chronobiology , a new science , has provided us a new approach to achieving peak 2 ) __________ . It is to 3 ) __________ our daily activities with our biological capacities. we 4 ) __________ on graph paper six readings of our temperature taken at four-hour 5 ) __________ throughout a day , and 6 ) __________ ourselves with such information as when our body temperature begins to rise , when it reaches its peak/ the highest point , and when the bottom / the lowest point appears. Then , we plan our daily activities by following the instructions given by chronobiology 7 ) __________. For instance , we tackle the most 8 ) __________ physical work when our temperature is the highest. 9 ) __________ , we pursue mental activities like reading and reflection when our temperature is falling. In this way , what we actually do 10 ) __________ with our body ’ s natural rhythms and we achieve our best as predicted.

    【判断题】对表结构进行修改时不必将表关闭。

    【多选题】对《将进酒》解说不正确的两项是

    【单选题】主角因为视障需要靠一根手杖做为他的眼睛,请问我们常称这手杖为?

    【判断题】《将进酒》中,置酒会友的并不是李白,“将进酒”是诗人酒酣耳热之际,兴会淋漓之时,将宾作主的狂放之态。

    【单选题】已知SN是一个字符型字段,下面SQL查询语句执行的结果是( )。 SELECT SN FROM S WHERE SN LIKE “AB%“;

    【单选题】对《将进酒》分析不正确的一项是

    【多选题】下列属于化学防治虫鼠的方法()。

    【单选题】下列选项中没有错别字的一项是

    【单选题】对“高堂明镜悲白发,朝如青丝暮成雪”翻译正确的一项是

    【多选题】下面对《将进酒》一诗的解说不正确的两项是

    【单选题】下列句子节奏划分不正确的一项是

    【单选题】在SOL语句中,对输出结果排序的语句是

    【单选题】革兰氏阴性菌对青霉素、溶菌酶不敏感的原因是

    【单选题】下列诗句朗读节奏划分不正确的一项是

    【单选题】女主角最希望的愿望是?

    【判断题】“岑夫子”姓岑,“夫子”"是对人的尊称,“先生”的意思;“丹丘生”名丹丘,“生”是对年青人的称呼。( )

    【判断题】非关系数据模型的数据操纵语言是“面向过程”的语言,用“过程化”语言完成某项请求必须指定路径。

    【单选题】请问本部电影的主角擅长哪项乐器?

    【单选题】下列划线词语的解释有错误的一项是

    【多选题】EAN-13 中前缀码代表 ( ) 。

    【判断题】“将进酒”是“请您喝酒”的意思,是李白根据诗歌的内容所命的诗题。

    【判断题】“钟鼓馔玉"形容富贵豪华的生活,钟鼓,鸣钟击鼓作乐。馔玉,美好的饮食。

    【单选题】在数据库中记录员工和员工工作信息,要求当某个员工离职后,数据库自动删除该员工的工作信息。则在定义工作信息表时,对于外关键字的删除规则应定义为

    【单选题】下列的SQL命令,实现投影操作的是

    【单选题】roduction systems with customized outputs typically have relatively:

    展开全文
  • 1. 索引和指针排序:因为元素的数量或者数据量巨大等原因,我们不希望频繁移动要排序的元素。因此,不移动元素的排序方法是维持一个索引数组或者索引指针,而排序的目标就是重排...3.关键字排序:具有相同关键字的数据

    1. 索引和指针排序

    • 因为元素的数量或者数据量巨大等原因,我们不希望频繁移动要排序的元素。因此,不移动元素的排序方法是维持一个索引数组或者索引指针,而排序的目标就是重排索引数组或指针。
      如: 初始化for(int i = 0; i < N; i++) a[i] = &data[i];
      使用间接比较#define less(A, B) (*A < *B)

    • 使用下标或指针排序的主要原因避免扰乱要排序的数据。我们可以对只读文件进行排序,或者针对一个文件的多个关键字进行排序。
      另一个原因避免了移动整个记录,对大型记录(相对小的关键字值)的移动开销是巨大的。
      例如:struct record { char [30]name; int num;}

      int less(Item a, Item b)
      {   return a->num < b->num;     }

      任意sort实现都将会基于这种类型的在整型域关键字上进行指针排序;

      int less(Item a, Item b)
      {    return strcmp(a->name, b->name) < 0;   }

      任意sort实现都将会基于这种类型的在字符串域关键字上进行指针排序;

    • 间接排序要求额外的空间存储下标或指针数组,以及额外的空间进行间接比较,但是相比不需要移动数据的灵活性,这些开销不算大。对于大型记录的文件,我们一般选择间接排序

    2. 链表排序

    应用范围和基本原理

    • 对于存储在链表中的数据,我们需要使用链表排序方式。在某些情况下,只有数据能够按照高效支持链表操作的顺序方式时,算法才会有用。
    • 通常我们所操作的表节点的指针时有应用系统的其他部分维护的(多重链表),这意味着排序程序只能改变节点中的链接,不能改变关键字值和其他信息.我们需要的是改变链接本身,以使经过链接遍历链表时,节点时按顺序出现的,同时经由其他链接访问时,不影响他们原本的顺序

    算法实现

    我们维持一个输入链表(h->next指向这个链表,有表头),一个输出链表(out指向这个链表)。当链表非空时,遍历链表找出最大元素(因为链表之前易于插入元素,先插大的,在大的之前依次插入小的),然后从输入表中去除这个最大元素,把他插入到输出表的前面。其中,找出最大元素函数findMax(),返回的是最大元素节点的上一节点的地址。(因为要想删除一个节点,必须知道它前一节点的地址prev->next = prev->next->next;

    C程序实现

    link linklist_sort(link h)
    {
        link out, t, max;
        out = NULL, t = NULL, max = NULL;
        while(h->next != NULL)
        {
            max = findMax(h);
            t = max->next;//最大元素节点
            max->next = max->next->next;//删除max节点
            t->next = out;//将t插入到out前
            out = t;//返回out
        }
        h->next = out;
        return h;
    }

    在一些表的处理中,我们不需要详细实现排序过程,只需要像插入排序依次向表中插入新元素,使表有序。

    3. 关键字索引排序

    原理

    所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。
    被排序的对象–文件由一组记录组成。记录则由若干个数据项(或域)组成。其中有一项可用来标识一个记录,称为关键字项。该数据项的值称为关键字(Key)。
    在待排序的文件中,若存在多个关键字相同的记录,我们希望通过按关键字索引排序,其中关键字是在一个小范围内的整数。
    例如:
    此处输入图片的描述
    1)我们统计不同值的关键字个数分别是多少:6个0,4个1,2个2,3个3.
    2)局部统计比其他关键字小的关键字的个数:0个关键字比0小,6个关键字比1小,10个关键字比2小,12个关键字比3小。
    3)根据上述统计数作为索引将关键字放到合适位置:在开头0开始放具有0关键字的元素0,根据0,增加指针值,放下一个0关键字的元素3……);将具有3关键字的元素从位置12开始放起(12个比3小);以此类推

    C程序实现

    void keyword_sort(Item a[], int l, int r)
    {
        Item b[r-l+1];
        int cnt[M];//M为关键字的个数
        for(int j = 0; j < M; j++)//初始化个数全0
            cnt[j] = 0;
        for(int i = l; i <= r; i++) //统计不同值的关键字个数,
            cnt[a[i]+1]++;
        for(int j = 1; j < M; j++)//统计比关键字j小的关键字的个数,cnt[j]存储比关键字j小的元素个数
            cnt[j] = cnt[j] + cnt[j-1];
        for(int i = l; i <= r; i++) //按关键字个数索引放到辅助数组b中
            b[cnt[ a[i] ]++] = a[i];
        for(int i = l; i <= r; i++)
            a[i] = b[i-l]; 
    }

    如果要排序的文件很大,使用辅助数组b会导致内存分配问题,可以通过使用原位排序避免使用额外数组完成。

    参考资料

    《算法:C语言实现》P180~190

    展开全文
  • --重复行 distinct 删除重复行 select distinct job from emp --SQL 结构化的查询语言 对数据库的数据、 --数据库服务端 关键字不能缩写 --DML DDL DCL --insert update delete DML语言...
  • 主要给大家总结介绍了关于SQL中一些小巧但常用的关键字,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • SQL基础关键字

    2022-03-16 10:28:17
    SQL语言关键字
  • mysql关键字大全

    千次阅读 2021-01-20 03:50:06
    级锁:开销小,加锁快...MySQL语法语句大全一、SQL速成 结构查询语言(SQL)是用于查询关系数据库的标准语言,它包括若干关键字和一致的语法,便于数据库元件(如、索引、 字段等)的建立和......关键字查找: select bId...
  • SQL语句关键字大全

    万次阅读 多人点赞 2018-06-02 21:25:52
    SQL语句的基本类型SQL语句的基本类型\color{lime}{SQL语句的基本类型} 特殊关键字特殊关键字\color{lime}{特殊关键字} 创建/插入/删除/修改创建/插入/删除/修改\color{lime}{创建/插入/删除/修改} SQL查询语句−单...
  • 分享职场生活、职场攻略、程序员创业资源,为一线开发者提供优质内容--创建create table tb_user(`id` int(11) not null auto_increment,user_name varchar(100),primary key (`id`))查看描述结构,字段类型...
  • C++关键字及其详解

    万次阅读 多人点赞 2019-03-03 20:02:21
    C++关键字备注:图中是C++98/03中的63个关键字,红色标注的是C语言的32个关键字。C++11中有73个关键字,新增加的10个分别为:alignas、alignof、char16_t、char32_t、constexpr、decltype、noexpect、nullptr、...
  • 执行SQL语句,查看基本结构,确认修改效果: desc tb_workers; 该语句还可以修改数据类型:如果将g_name字段名称修改为name,数据类型修改为 char(30); alter table tb_workers change g_name name char(30); ...
  • PostgreSQL DISTINCT 关键字

    千次阅读 2021-11-29 15:58:56
    我们平时在操作数据时,有可能出现一种情况,在一个中有多个重复的记录,当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。 语法 用于去除重复记录的 DISTINCT ...
  • Python的基本数据类型包含数字、字符串、列表、元组、字典、集合几大类。在介绍基本数据类型之前,先说明三个Python内建方法,有助于认识数据类型,第一个内建方法:print() --->print方法可以将内容打印到控制台...
  • ALTERTABLE(修改)用于在已有的中添加、修改或删除列。 SELECT(赋值,查询(SQL)) 使用SELECT语句为局部变量赋值。查询语句。 AND布尔操作符。如果AND操作符连接两个条件,检索两个条件都为真的行。 ALL...
  • 主要介绍了Java中final关键字详解及实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Python关键字35个

    千次阅读 2021-03-17 13:19:05
    摘要python3.x中有35个关键字,比python2.x增加了6个: False True None async await和nonlocal 且删除了exec与print。python3.8中: python2.7中: 详解(按新版图一顺序):(1)False 和 True : 布尔值,0和1(2)None...
  • 今天主要学习下Java语言中的static关键字。static关键字的含义及使用场景static是Java50个关键字之一。static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法。...
  • 1)创建一个雇员IT_EMPLOYEES,由编号 EMPLOYEE_ID、名FIRST_NAME、姓LAST_NAME、部门经理编号MANAGER_ID组成 2)创建视图 视图与基表不同,是一个虚,数据库中只存放虚的定义,数据仍在原来的基表中...
  • SQLite 的 AUTOINCREMENT 是一个关键字,用于中的字段值自动递增,关键字 AUTOINCREMENT 只能用于整型(INTEGER)字段。
  • 这篇文章主要是考虑到有不少人问我在appium中的一些英文参数、关键字是什么意思,特地查询了些各种资料,自己整理了一番(后来才发现有官方文档 ) 第一类:【appium】appium自动化入门之环境搭建(上) 第二类:...
  • MySQL的join关键字详解

    2021-04-25 00:56:19
    MySQL的join关键字详解文章目录内连接 inner join左外连接 left join右外连接 right join左连接右连接全连接差集SQL Join联接子句用于在两个或更多在数据库中的的记录组合。JOIN是通过使用从两个表字段共通的值...
  • 关键字是预先保留的标识符,每个关键字都有特殊的含义。编程语言众多,但每种语言都有相应的关键字,Python 也不例外,它自带了一个 keyword 模块,用于检测关键字。 Python中的关键字 &amp;gt;&amp;...
  • Python3关键字总结

    2020-11-24 17:25:15
    这一节主要介绍Python3的关键字。首先,通过使用import keyword我们可以看到python3的关键字列表。下面我们来看看这33个关键字的各种解释。True, FalseTrue和False主要是比较运算和逻辑运算的结果体现。例如NoneNone...
  • 5.不要使用python函数名和关键字关键字 python3.7.4中的关键字(不用记,熟悉即可) False None True and as assert async await break class continue def del elif else except finally for from global if ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 340,509
精华内容 136,203
关键字:

删除基本表的关键字